From 88570a5e4890c570c6e7455eb39915e81b53cebc Mon Sep 17 00:00:00 2001 From: "roeai-release-bot[bot]" <238390229+roeai-release-bot[bot]@users.noreply.github.com> Date: Sat, 17 Oct 2026 17:59:52 +0000 Subject: [PATCH] Release v1.1.18 --- .roe-main-release-version | 2 +- README.md | 2 +- openapi/openapi.yml | 26 +++++++------- pyproject.toml | 2 +- .../connections/connections_partial_update.py | 36 +++++++++---------- .../api/connections/connections_update.py | 36 +++++++++---------- src/roe/_generated/models/connection.py | 2 +- src/roe/_generated/models/connection_list.py | 2 +- .../_generated/models/connector_type_enum.py | 2 ++ .../models/create_connection_request.py | 2 ++ .../patched_update_connection_request.py | 9 +++-- .../test_connection_credentials_request.py | 2 ++ .../models/update_connection_request.py | 9 +++-- uv.lock | 2 +- 14 files changed, 66 insertions(+), 68 deletions(-) diff --git a/.roe-main-release-version b/.roe-main-release-version index f749893..68a4606 100644 --- a/.roe-main-release-version +++ b/.roe-main-release-version @@ -1 +1 @@ -1-1-1 +1-1-2 diff --git a/README.md b/README.md index af406aa..7e6b142 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ A Python SDK for the [Roe](https://www.roe-ai.com/) API. -> **v1.1.17** - SDK operation coverage is synchronized across Python, +> **v1.1.18** - SDK operation coverage is synchronized across Python, > TypeScript, and Go. See `SDK_EXAMPLES.md` for copy-ready examples and > use cases. diff --git a/openapi/openapi.yml b/openapi/openapi.yml index 390357a..889596b 100644 --- a/openapi/openapi.yml +++ b/openapi/openapi.yml @@ -4930,7 +4930,7 @@ components: Serializer for Connection model. Returns: - config: Non-sensitive config from DB - - auth_config: Actual auth credentials from Secrets Manager (not the internal reference) + - auth_config: Manual credentials, or safe metadata for managed Zendesk OAuth properties: id: type: string @@ -5047,7 +5047,7 @@ components: type: object description: |- Lightweight serializer for listing connections. - Only returns metadata, no auth_config (avoids Secrets Manager calls). + Returns metadata without fetching credentials from Secrets Manager. properties: id: type: string @@ -5204,6 +5204,8 @@ components: - socure - custom_mcp - metabase + - slack + - smtp type: string description: |- * `snowflake` - SNOWFLAKE @@ -5228,6 +5230,8 @@ components: * `socure` - SOCURE * `custom_mcp` - CUSTOM_MCP * `metabase` - METABASE + * `slack` - SLACK + * `smtp` - SMTP CreateConnectionRequest: type: object description: |- @@ -5920,11 +5924,10 @@ components: description: |- Serializer for updating connections. - Cross-state Pydantic validation (config + auth) lives in the view's - ``update()`` method now -- see ``connections.views. - ConnectionRetrieveUpdateDestroyView.update``. That path is the single - source of truth for canonical validation + write, mirrors the create - path's ``service.create_connection_with_secrets``, AND correctly + Cross-state Pydantic validation (config + auth) lives in + ``connections.services.connection.update_connection_with_secrets``. That + path is the single source of truth for canonical validation + write, + mirrors the create path's ``create_connection_with_secrets``, AND correctly handles the SM-fetch-failure case for the unchanged-auth branch (returns 502 / opportunistic backfill instead of silently corrupting the fingerprint by hashing ``{}``). Re-running the same validation @@ -6798,11 +6801,10 @@ components: description: |- Serializer for updating connections. - Cross-state Pydantic validation (config + auth) lives in the view's - ``update()`` method now -- see ``connections.views. - ConnectionRetrieveUpdateDestroyView.update``. That path is the single - source of truth for canonical validation + write, mirrors the create - path's ``service.create_connection_with_secrets``, AND correctly + Cross-state Pydantic validation (config + auth) lives in + ``connections.services.connection.update_connection_with_secrets``. That + path is the single source of truth for canonical validation + write, + mirrors the create path's ``create_connection_with_secrets``, AND correctly handles the SM-fetch-failure case for the unchanged-auth branch (returns 502 / opportunistic backfill instead of silently corrupting the fingerprint by hashing ``{}``). Re-running the same validation diff --git a/pyproject.toml b/pyproject.toml index b71dcb2..8dfc7eb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "roe-ai" -version = "1.1.17" +version = "1.1.18" authors = [ { name = "Roe", email = "founders@roe-ai.com" }, ] diff --git a/src/roe/_generated/api/connections/connections_partial_update.py b/src/roe/_generated/api/connections/connections_partial_update.py index 6409b47..e7c47cf 100644 --- a/src/roe/_generated/api/connections/connections_partial_update.py +++ b/src/roe/_generated/api/connections/connections_partial_update.py @@ -145,11 +145,10 @@ def sync_detailed( organization_id (UUID | Unset): body (PatchedUpdateConnectionRequest | Unset): Serializer for updating connections. - Cross-state Pydantic validation (config + auth) lives in the view's - ``update()`` method now -- see ``connections.views. - ConnectionRetrieveUpdateDestroyView.update``. That path is the single - source of truth for canonical validation + write, mirrors the create - path's ``service.create_connection_with_secrets``, AND correctly + Cross-state Pydantic validation (config + auth) lives in + ``connections.services.connection.update_connection_with_secrets``. That + path is the single source of truth for canonical validation + write, + mirrors the create path's ``create_connection_with_secrets``, AND correctly handles the SM-fetch-failure case for the unchanged-auth branch (returns 502 / opportunistic backfill instead of silently corrupting the fingerprint by hashing ``{}``). Re-running the same validation @@ -194,11 +193,10 @@ def sync( organization_id (UUID | Unset): body (PatchedUpdateConnectionRequest | Unset): Serializer for updating connections. - Cross-state Pydantic validation (config + auth) lives in the view's - ``update()`` method now -- see ``connections.views. - ConnectionRetrieveUpdateDestroyView.update``. That path is the single - source of truth for canonical validation + write, mirrors the create - path's ``service.create_connection_with_secrets``, AND correctly + Cross-state Pydantic validation (config + auth) lives in + ``connections.services.connection.update_connection_with_secrets``. That + path is the single source of truth for canonical validation + write, + mirrors the create path's ``create_connection_with_secrets``, AND correctly handles the SM-fetch-failure case for the unchanged-auth branch (returns 502 / opportunistic backfill instead of silently corrupting the fingerprint by hashing ``{}``). Re-running the same validation @@ -238,11 +236,10 @@ async def asyncio_detailed( organization_id (UUID | Unset): body (PatchedUpdateConnectionRequest | Unset): Serializer for updating connections. - Cross-state Pydantic validation (config + auth) lives in the view's - ``update()`` method now -- see ``connections.views. - ConnectionRetrieveUpdateDestroyView.update``. That path is the single - source of truth for canonical validation + write, mirrors the create - path's ``service.create_connection_with_secrets``, AND correctly + Cross-state Pydantic validation (config + auth) lives in + ``connections.services.connection.update_connection_with_secrets``. That + path is the single source of truth for canonical validation + write, + mirrors the create path's ``create_connection_with_secrets``, AND correctly handles the SM-fetch-failure case for the unchanged-auth branch (returns 502 / opportunistic backfill instead of silently corrupting the fingerprint by hashing ``{}``). Re-running the same validation @@ -287,11 +284,10 @@ async def asyncio( organization_id (UUID | Unset): body (PatchedUpdateConnectionRequest | Unset): Serializer for updating connections. - Cross-state Pydantic validation (config + auth) lives in the view's - ``update()`` method now -- see ``connections.views. - ConnectionRetrieveUpdateDestroyView.update``. That path is the single - source of truth for canonical validation + write, mirrors the create - path's ``service.create_connection_with_secrets``, AND correctly + Cross-state Pydantic validation (config + auth) lives in + ``connections.services.connection.update_connection_with_secrets``. That + path is the single source of truth for canonical validation + write, + mirrors the create path's ``create_connection_with_secrets``, AND correctly handles the SM-fetch-failure case for the unchanged-auth branch (returns 502 / opportunistic backfill instead of silently corrupting the fingerprint by hashing ``{}``). Re-running the same validation diff --git a/src/roe/_generated/api/connections/connections_update.py b/src/roe/_generated/api/connections/connections_update.py index f4d8b52..d934543 100644 --- a/src/roe/_generated/api/connections/connections_update.py +++ b/src/roe/_generated/api/connections/connections_update.py @@ -145,11 +145,10 @@ def sync_detailed( organization_id (UUID | Unset): body (UpdateConnectionRequest | Unset): Serializer for updating connections. - Cross-state Pydantic validation (config + auth) lives in the view's - ``update()`` method now -- see ``connections.views. - ConnectionRetrieveUpdateDestroyView.update``. That path is the single - source of truth for canonical validation + write, mirrors the create - path's ``service.create_connection_with_secrets``, AND correctly + Cross-state Pydantic validation (config + auth) lives in + ``connections.services.connection.update_connection_with_secrets``. That + path is the single source of truth for canonical validation + write, + mirrors the create path's ``create_connection_with_secrets``, AND correctly handles the SM-fetch-failure case for the unchanged-auth branch (returns 502 / opportunistic backfill instead of silently corrupting the fingerprint by hashing ``{}``). Re-running the same validation @@ -194,11 +193,10 @@ def sync( organization_id (UUID | Unset): body (UpdateConnectionRequest | Unset): Serializer for updating connections. - Cross-state Pydantic validation (config + auth) lives in the view's - ``update()`` method now -- see ``connections.views. - ConnectionRetrieveUpdateDestroyView.update``. That path is the single - source of truth for canonical validation + write, mirrors the create - path's ``service.create_connection_with_secrets``, AND correctly + Cross-state Pydantic validation (config + auth) lives in + ``connections.services.connection.update_connection_with_secrets``. That + path is the single source of truth for canonical validation + write, + mirrors the create path's ``create_connection_with_secrets``, AND correctly handles the SM-fetch-failure case for the unchanged-auth branch (returns 502 / opportunistic backfill instead of silently corrupting the fingerprint by hashing ``{}``). Re-running the same validation @@ -238,11 +236,10 @@ async def asyncio_detailed( organization_id (UUID | Unset): body (UpdateConnectionRequest | Unset): Serializer for updating connections. - Cross-state Pydantic validation (config + auth) lives in the view's - ``update()`` method now -- see ``connections.views. - ConnectionRetrieveUpdateDestroyView.update``. That path is the single - source of truth for canonical validation + write, mirrors the create - path's ``service.create_connection_with_secrets``, AND correctly + Cross-state Pydantic validation (config + auth) lives in + ``connections.services.connection.update_connection_with_secrets``. That + path is the single source of truth for canonical validation + write, + mirrors the create path's ``create_connection_with_secrets``, AND correctly handles the SM-fetch-failure case for the unchanged-auth branch (returns 502 / opportunistic backfill instead of silently corrupting the fingerprint by hashing ``{}``). Re-running the same validation @@ -287,11 +284,10 @@ async def asyncio( organization_id (UUID | Unset): body (UpdateConnectionRequest | Unset): Serializer for updating connections. - Cross-state Pydantic validation (config + auth) lives in the view's - ``update()`` method now -- see ``connections.views. - ConnectionRetrieveUpdateDestroyView.update``. That path is the single - source of truth for canonical validation + write, mirrors the create - path's ``service.create_connection_with_secrets``, AND correctly + Cross-state Pydantic validation (config + auth) lives in + ``connections.services.connection.update_connection_with_secrets``. That + path is the single source of truth for canonical validation + write, + mirrors the create path's ``create_connection_with_secrets``, AND correctly handles the SM-fetch-failure case for the unchanged-auth branch (returns 502 / opportunistic backfill instead of silently corrupting the fingerprint by hashing ``{}``). Re-running the same validation diff --git a/src/roe/_generated/models/connection.py b/src/roe/_generated/models/connection.py index 1e16340..74ef871 100644 --- a/src/roe/_generated/models/connection.py +++ b/src/roe/_generated/models/connection.py @@ -32,7 +32,7 @@ class Connection: """ Serializer for Connection model. Returns: - config: Non-sensitive config from DB - - auth_config: Actual auth credentials from Secrets Manager (not the internal reference) + - auth_config: Manual credentials, or safe metadata for managed Zendesk OAuth Attributes: id (UUID): diff --git a/src/roe/_generated/models/connection_list.py b/src/roe/_generated/models/connection_list.py index 5133c12..f23deb6 100644 --- a/src/roe/_generated/models/connection_list.py +++ b/src/roe/_generated/models/connection_list.py @@ -29,7 +29,7 @@ @_attrs_define class ConnectionList: """ Lightweight serializer for listing connections. - Only returns metadata, no auth_config (avoids Secrets Manager calls). + Returns metadata without fetching credentials from Secrets Manager. Attributes: id (UUID): diff --git a/src/roe/_generated/models/connector_type_enum.py b/src/roe/_generated/models/connector_type_enum.py index 2395013..4245f7f 100644 --- a/src/roe/_generated/models/connector_type_enum.py +++ b/src/roe/_generated/models/connector_type_enum.py @@ -18,6 +18,8 @@ class ConnectorTypeEnum(str, Enum): SHIELD = "shield" SIFT = "sift" SIFT_API = "sift_api" + SLACK = "slack" + SMTP = "smtp" SNOWFLAKE = "snowflake" SOCURE = "socure" STRIPE = "stripe" diff --git a/src/roe/_generated/models/create_connection_request.py b/src/roe/_generated/models/create_connection_request.py index 5e3412f..2e87a6a 100644 --- a/src/roe/_generated/models/create_connection_request.py +++ b/src/roe/_generated/models/create_connection_request.py @@ -54,6 +54,8 @@ class CreateConnectionRequest: * `socure` - SOCURE * `custom_mcp` - CUSTOM_MCP * `metabase` - METABASE + * `slack` - SLACK + * `smtp` - SMTP name (str): config (CreateConnectionRequestConfig): description (str | Unset): diff --git a/src/roe/_generated/models/patched_update_connection_request.py b/src/roe/_generated/models/patched_update_connection_request.py index 5fb6b17..d0e1bbe 100644 --- a/src/roe/_generated/models/patched_update_connection_request.py +++ b/src/roe/_generated/models/patched_update_connection_request.py @@ -28,11 +28,10 @@ class PatchedUpdateConnectionRequest: """ Serializer for updating connections. - Cross-state Pydantic validation (config + auth) lives in the view's - ``update()`` method now -- see ``connections.views. - ConnectionRetrieveUpdateDestroyView.update``. That path is the single - source of truth for canonical validation + write, mirrors the create - path's ``service.create_connection_with_secrets``, AND correctly + Cross-state Pydantic validation (config + auth) lives in + ``connections.services.connection.update_connection_with_secrets``. That + path is the single source of truth for canonical validation + write, + mirrors the create path's ``create_connection_with_secrets``, AND correctly handles the SM-fetch-failure case for the unchanged-auth branch (returns 502 / opportunistic backfill instead of silently corrupting the fingerprint by hashing ``{}``). Re-running the same validation diff --git a/src/roe/_generated/models/test_connection_credentials_request.py b/src/roe/_generated/models/test_connection_credentials_request.py index 96287fc..b508d2f 100644 --- a/src/roe/_generated/models/test_connection_credentials_request.py +++ b/src/roe/_generated/models/test_connection_credentials_request.py @@ -52,6 +52,8 @@ class TestConnectionCredentialsRequest: * `socure` - SOCURE * `custom_mcp` - CUSTOM_MCP * `metabase` - METABASE + * `slack` - SLACK + * `smtp` - SMTP config (TestConnectionCredentialsRequestConfig): auth_config (TestConnectionCredentialsRequestAuthConfig | Unset): dynamic_inputs (TestConnectionCredentialsRequestDynamicInputs | Unset): diff --git a/src/roe/_generated/models/update_connection_request.py b/src/roe/_generated/models/update_connection_request.py index 07e5c2b..13f9a4c 100644 --- a/src/roe/_generated/models/update_connection_request.py +++ b/src/roe/_generated/models/update_connection_request.py @@ -28,11 +28,10 @@ class UpdateConnectionRequest: """ Serializer for updating connections. - Cross-state Pydantic validation (config + auth) lives in the view's - ``update()`` method now -- see ``connections.views. - ConnectionRetrieveUpdateDestroyView.update``. That path is the single - source of truth for canonical validation + write, mirrors the create - path's ``service.create_connection_with_secrets``, AND correctly + Cross-state Pydantic validation (config + auth) lives in + ``connections.services.connection.update_connection_with_secrets``. That + path is the single source of truth for canonical validation + write, + mirrors the create path's ``create_connection_with_secrets``, AND correctly handles the SM-fetch-failure case for the unchanged-auth branch (returns 502 / opportunistic backfill instead of silently corrupting the fingerprint by hashing ``{}``). Re-running the same validation diff --git a/uv.lock b/uv.lock index 4dfec43..741cca4 100644 --- a/uv.lock +++ b/uv.lock @@ -454,7 +454,7 @@ wheels = [ [[package]] name = "roe-ai" -version = "1.1.17" +version = "1.1.18" source = { editable = "." } dependencies = [ { name = "attrs" },