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

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .roe-main-release-version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1-1-4
1-1-5
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
A Python SDK for the [Roe](https://www.roe-ai.com/) API.

<!-- ROE-SDK:RELEASE-BANNER:START -->
> **v1.1.21** - SDK operation coverage is synchronized across Python,
> **v1.1.22** - SDK operation coverage is synchronized across Python,
> TypeScript, and Go. See `SDK_EXAMPLES.md` for copy-ready examples and
> use cases.
<!-- ROE-SDK:RELEASE-BANNER:END -->
Expand Down
5 changes: 5 additions & 0 deletions SDK_EXAMPLES.md
Original file line number Diff line number Diff line change
Expand Up @@ -502,6 +502,7 @@ result = client.connections.list(
search="search", # optional
page=1, # optional
page_size=1, # optional
lifecycle="lifecycle", # optional
)
```

Expand Down Expand Up @@ -585,6 +586,8 @@ result = client.connections.update(
config={}, # optional
auth_config={}, # optional
dynamic_inputs={}, # optional
lifecycle="lifecycle", # optional
confirm_in_use=True, # optional
)
```

Expand All @@ -604,6 +607,8 @@ result = client.connections.replace(
config={}, # optional
auth_config={}, # optional
dynamic_inputs={}, # optional
lifecycle="lifecycle", # optional
confirm_in_use=True, # optional
)
```

Expand Down
78 changes: 69 additions & 9 deletions openapi/openapi.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2388,6 +2388,13 @@ paths:
schema:
type: string
description: Filter by connector type (e.g., 'snowflake', 'postgres')
- in: query
name: lifecycle
schema:
type: string
description: 'Filter by lifecycle: active, archived or disconnected. Pickers
ask for ''active'' so archived and disconnected connections can''t be chosen
again.'
- name: ordering
required: false
in: query
Expand Down Expand Up @@ -2643,10 +2650,11 @@ paths:
content:
application/json:
schema:
$ref: '#/components/schemas/DuplicateConnectionResponse'
description: A strict-identity duplicate of this connection already exists
in this organization, or post actions still call a write operation this
update removes or renames ({error}).
$ref: '#/components/schemas/ConnectionUpdateConflictResponse'
description: 'A strict-identity duplicate of this connection already exists
in this organization, post actions still call a write operation this update
removes or renames ({error}), or the update changes calls for agents or
webhooks that use the connection ({error, in_use: true}; resend with confirm_in_use).'
Comment on lines +2654 to +2657

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Confirmation conflicts fail to load

The new in-use conflict returns {error, in_use: true}, but both PUT and PATCH still read every 409 as DuplicateConnectionResponse. That model requires existing_connection, which this response lacks. Callers using the generated endpoints with client.raw get KeyError instead of the conflict, so they cannot inspect in_use before resending with confirm_in_use.

Describe both conflict shapes in the response schema and regenerate the models and endpoints.

Knowledge Base Used: Generated API integration

Fix in Claude Code

patch:
operationId: connections_partial_update
description: 'Public API: GET/PATCH/DELETE /api/v1/connections/{id}/ - Manage
Expand Down Expand Up @@ -2725,10 +2733,11 @@ paths:
content:
application/json:
schema:
$ref: '#/components/schemas/DuplicateConnectionResponse'
description: A strict-identity duplicate of this connection already exists
in this organization, or post actions still call a write operation this
update removes or renames ({error}).
$ref: '#/components/schemas/ConnectionUpdateConflictResponse'
description: 'A strict-identity duplicate of this connection already exists
in this organization, post actions still call a write operation this update
removes or renames ({error}), or the update changes calls for agents or
webhooks that use the connection ({error, in_use: true}; resend with confirm_in_use).'
delete:
operationId: connections_destroy
description: 'Public API: GET/PATCH/DELETE /api/v1/connections/{id}/ - Manage
Expand Down Expand Up @@ -2773,7 +2782,7 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/ConnectionDeleteErrorResponse'
description: Post actions still reference this connection.
description: Agents or webhooks still use this connection.
'500':
content:
application/json:
Expand Down Expand Up @@ -5817,6 +5826,8 @@ components:
readOnly: true
status:
$ref: '#/components/schemas/StatusEnum'
lifecycle:
$ref: '#/components/schemas/LifecycleEnum'
created_at:
type: string
format: date-time
Expand Down Expand Up @@ -5924,6 +5935,8 @@ components:
readOnly: true
status:
$ref: '#/components/schemas/StatusEnum'
lifecycle:
$ref: '#/components/schemas/LifecycleEnum'
created_at:
type: string
format: date-time
Expand Down Expand Up @@ -5977,6 +5990,23 @@ components:
- connection_id
- operation
type: object
ConnectionUpdateConflictResponse:
type: object
description: Body of a 409 from update/replace; which fields are set depends
on the cause.
properties:
error:
type: string
existing_connection:
allOf:
- $ref: '#/components/schemas/DuplicateConnectionExisting'
description: Set when an identical connection already exists.
in_use:
type: boolean
description: True when agents or webhooks use the settings being changed;
resend with confirm_in_use to save anyway.
required:
- error
ConnectorBrowserSession:
type: object
properties:
Expand Down Expand Up @@ -6684,13 +6714,30 @@ components:
- description
- key
- value
LifecycleEnum:
enum:
- active
- archived
- disconnected
type: string
description: |-
* `active` - Active
* `archived` - Archived
* `disconnected` - Disconnected
ListAgentJob:
type: object
properties:
id:
type: string
format: uuid
readOnly: true
agent_version_id:
type:
- string
- 'null'
format: uuid
readOnly: true
description: ID of the agent version the job ran on
agent_version_name:
type:
- string
Expand Down Expand Up @@ -6755,6 +6802,7 @@ components:
- type: 'null'
readOnly: true
required:
- agent_version_id
- agent_version_name
- created_at
- creator
Expand Down Expand Up @@ -7151,6 +7199,12 @@ components:
additionalProperties:
type: string
minLength: 1
lifecycle:
$ref: '#/components/schemas/LifecycleEnum'
Comment on lines +7202 to +7203

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Friendly methods miss lifecycle options

The new lifecycle filter and update field are missing from the friendly wrapper contract. client.connections.list(lifecycle="active") and client.connections.update(id, lifecycle="archived") reject the argument. Users must switch to generated endpoint calls to filter active connections or archive and reactivate them.

Add optional lifecycle arguments to list, update, and replace in the wrapper contract and regenerate the friendly methods.

Knowledge Base Used: Wrapper generation

Fix in Claude Code

confirm_in_use:
type: boolean
description: Save a config change that alters calls for agents or webhooks
that already use the connection.
PatchedUpdatePolicyRequest:
type: object
description: Serializer for updating policy metadata (name, description)
Expand Down Expand Up @@ -8111,6 +8165,12 @@ components:
additionalProperties:
type: string
minLength: 1
lifecycle:
$ref: '#/components/schemas/LifecycleEnum'
confirm_in_use:
type: boolean
description: Save a config change that alters calls for agents or webhooks
that already use the connection.
UpdatePolicy:
type: object
description: Serializer for updating policy metadata (name, description)
Expand Down
36 changes: 33 additions & 3 deletions openapi/wrappers.yml
Original file line number Diff line number Diff line change
Expand Up @@ -687,6 +687,12 @@ apis:
annotation: int | None
default: null
pass_unset_when_none: true
- name: lifecycle
location: query
wire_name: lifecycle
annotation: str | None
default: null
pass_unset_when_none: true
- kind: body
method_name: create
docstring: Create a connection.
Expand Down Expand Up @@ -774,7 +780,7 @@ apis:
annotation: str
- kind: body
method_name: update
docstring: Update mutable connection fields.
docstring: Update mutable connection fields. Changing settings agents already use needs confirm_in_use.
method: PATCH
path: /v1/connections/{id}/
endpoint_module: roe._generated.api.connections.connections_partial_update
Expand Down Expand Up @@ -817,9 +823,21 @@ apis:
annotation: dict[str, str] | None
default: null
pass_unset_when_none: true
- name: lifecycle
location: body
wire_name: lifecycle
annotation: str | None
default: null
pass_unset_when_none: true
- name: confirm_in_use
location: body
wire_name: confirm_in_use
annotation: bool | None
default: null
pass_unset_when_none: true
- kind: body
method_name: replace
docstring: Replace a connection.
docstring: Replace a connection. Changing settings agents already use needs confirm_in_use.
method: PUT
path: /v1/connections/{id}/
endpoint_module: roe._generated.api.connections.connections_update
Expand Down Expand Up @@ -862,9 +880,21 @@ apis:
annotation: dict[str, str] | None
default: null
pass_unset_when_none: true
- name: lifecycle
location: body
wire_name: lifecycle
annotation: str | None
default: null
pass_unset_when_none: true
- name: confirm_in_use
location: body
wire_name: confirm_in_use
annotation: bool | None
default: null
pass_unset_when_none: true
- kind: body
method_name: delete
docstring: Delete a connection.
docstring: Delete a connection. Refused while agents or webhooks use it.
method: DELETE
path: /v1/connections/{id}/
endpoint_module: roe._generated.api.connections.connections_destroy
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "roe-ai"
version = "1.1.21"
version = "1.1.22"
authors = [
{ name = "Roe", email = "[email protected]" },
]
Expand Down
15 changes: 15 additions & 0 deletions src/roe/_generated/api/connections/connections_list.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
def _get_kwargs(
*,
connector_type: str | Unset = UNSET,
lifecycle: str | Unset = UNSET,
ordering: str | Unset = UNSET,
organization_id: UUID | Unset = UNSET,
page: int | Unset = UNSET,
Expand All @@ -35,6 +36,8 @@ def _get_kwargs(

params["connector_type"] = connector_type

params["lifecycle"] = lifecycle

params["ordering"] = ordering

json_organization_id: str | Unset = UNSET
Expand Down Expand Up @@ -111,6 +114,7 @@ def sync_detailed(
*,
client: AuthenticatedClient,
connector_type: str | Unset = UNSET,
lifecycle: str | Unset = UNSET,
ordering: str | Unset = UNSET,
organization_id: UUID | Unset = UNSET,
page: int | Unset = UNSET,
Expand All @@ -122,6 +126,7 @@ def sync_detailed(

Args:
connector_type (str | Unset):
lifecycle (str | Unset):
ordering (str | Unset):
organization_id (UUID | Unset):
page (int | Unset):
Expand All @@ -139,6 +144,7 @@ def sync_detailed(

kwargs = _get_kwargs(
connector_type=connector_type,
lifecycle=lifecycle,
ordering=ordering,
organization_id=organization_id,
page=page,
Expand All @@ -157,6 +163,7 @@ def sync(
*,
client: AuthenticatedClient,
connector_type: str | Unset = UNSET,
lifecycle: str | Unset = UNSET,
ordering: str | Unset = UNSET,
organization_id: UUID | Unset = UNSET,
page: int | Unset = UNSET,
Expand All @@ -168,6 +175,7 @@ def sync(

Args:
connector_type (str | Unset):
lifecycle (str | Unset):
ordering (str | Unset):
organization_id (UUID | Unset):
page (int | Unset):
Expand All @@ -186,6 +194,7 @@ def sync(
return sync_detailed(
client=client,
connector_type=connector_type,
lifecycle=lifecycle,
ordering=ordering,
organization_id=organization_id,
page=page,
Expand All @@ -198,6 +207,7 @@ async def asyncio_detailed(
*,
client: AuthenticatedClient,
connector_type: str | Unset = UNSET,
lifecycle: str | Unset = UNSET,
ordering: str | Unset = UNSET,
organization_id: UUID | Unset = UNSET,
page: int | Unset = UNSET,
Expand All @@ -209,6 +219,7 @@ async def asyncio_detailed(

Args:
connector_type (str | Unset):
lifecycle (str | Unset):
ordering (str | Unset):
organization_id (UUID | Unset):
page (int | Unset):
Expand All @@ -226,6 +237,7 @@ async def asyncio_detailed(

kwargs = _get_kwargs(
connector_type=connector_type,
lifecycle=lifecycle,
ordering=ordering,
organization_id=organization_id,
page=page,
Expand All @@ -244,6 +256,7 @@ async def asyncio(
*,
client: AuthenticatedClient,
connector_type: str | Unset = UNSET,
lifecycle: str | Unset = UNSET,
ordering: str | Unset = UNSET,
organization_id: UUID | Unset = UNSET,
page: int | Unset = UNSET,
Expand All @@ -255,6 +268,7 @@ async def asyncio(

Args:
connector_type (str | Unset):
lifecycle (str | Unset):
ordering (str | Unset):
organization_id (UUID | Unset):
page (int | Unset):
Expand All @@ -273,6 +287,7 @@ async def asyncio(
return (await asyncio_detailed(
client=client,
connector_type=connector_type,
lifecycle=lifecycle,
ordering=ordering,
organization_id=organization_id,
page=page,
Expand Down
Loading
Loading