diff --git a/.speakeasy/gen.lock b/.speakeasy/gen.lock index 3b0d16cb6..36becbe30 100644 --- a/.speakeasy/gen.lock +++ b/.speakeasy/gen.lock @@ -1,19 +1,19 @@ lockVersion: 2.0.0 id: c48cf606-fb42-4a45-9c23-8f0555307828 management: - docChecksum: 434b72129cda1f59f72dae47227c00ba + docChecksum: 279b5f97d142c9e39e195b0a84085c9d docVersion: 1.0.0 speakeasyVersion: 1.787.0 generationVersion: 2.914.0 - releaseVersion: 1.3.65 - configChecksum: 3dfa94babff61f2a72b47112402a6ce3 + releaseVersion: 1.3.66 + configChecksum: d60333aec60c8fc9660768e2c1487354 repoURL: https://github.com/OpenRouterTeam/python-sdk.git installationURL: https://github.com/OpenRouterTeam/python-sdk.git published: true persistentEdits: - generation_id: 3dcb622d-01b9-48e2-9a6f-5186f23b90de - pristine_commit_hash: 03713aa9c715022aabafbaa3903e62b137404f37 - pristine_tree_hash: f65dc457eb12aa360c8c42bc3c3c534cf6d7c601 + generation_id: 51013c78-9d03-44f4-ac2e-93284b41f297 + pristine_commit_hash: df1988e5cff6b0b03406873a3986cdaaf8dff042 + pristine_tree_hash: 1e738a4df36772d51cf0ada4ff040bb3429109b4 features: python: acceptHeaders: 3.0.0 @@ -4682,10 +4682,6 @@ trackedFiles: id: f564e5e9a7d3 last_write_checksum: sha1:e51f09243a346926c426f53b07865f5ed145511d pristine_git_object: 6025f743b09271172bd6bc22801cc51d73513980 - docs/components/method.mdx: - id: 52eb604d9844 - last_write_checksum: sha1:a1671e63404dd1f194cf0704138919c10a9ca6c6 - pristine_git_object: 90145e7861da0ef5f30900bff09539fe2e1bdeb8 docs/components/mismatchbehavior.mdx: id: 729a5cc8daa3 last_write_checksum: sha1:e964917ce0f95f4347824b1a51ac6bb120469707 @@ -5064,8 +5060,12 @@ trackedFiles: pristine_git_object: 9476e2dbdbec63648b8493bee15c7fd9b37c6933 docs/components/observabilitywebhookdestinationconfig.mdx: id: 3f56a0517583 - last_write_checksum: sha1:50a935198381531354a979579be97e2f61f1ad46 - pristine_git_object: 8dab0b1a2c58a1cc0d7b1d37d6290d7b5d67473a + last_write_checksum: sha1:81471a0841dd7068bfa104d246f61ec3708480f6 + pristine_git_object: f74e02efc42ab6d39086ce5fed58a9e5684c20a3 + docs/components/observabilitywebhookdestinationmethod.mdx: + id: d19f8cf49bfe + last_write_checksum: sha1:a9ba20f01604880cc2eafca89741b089fe8cc342 + pristine_git_object: 7e7dd924ff4056ab3ae9003ca9c7dc7aebe4cf21 docs/components/observabilitywebhookdestinationtype.mdx: id: 35262d81b0a1 last_write_checksum: sha1:53220ed66cf059d9f06df81b7f5bb0f2d87f5283 @@ -6758,6 +6758,10 @@ trackedFiles: id: 4ad56b7d7d1a last_write_checksum: sha1:0ee81f3831154c344605a72f2924167f220f402b pristine_git_object: 2609a9af043ce5570970252f3ebd5df12d693be3 + docs/components/route.mdx: + id: f43dfcb07063 + last_write_checksum: sha1:473caf7a8c0c3ab2a0b9e6ec4d18b068e78a1489 + pristine_git_object: d4c2213a983345b39746b758896ecfe67babc994 docs/components/routedservicetier.mdx: id: 1ecc7cdd925e last_write_checksum: sha1:674d22f78f85c9d89408f6e791023fd6d1f36289 @@ -6980,12 +6984,16 @@ trackedFiles: pristine_git_object: 1c0dd3c44cfce8b531e7d89e3db6b2787f060984 docs/components/signinterndaemonrequest.mdx: id: a611533bd5da - last_write_checksum: sha1:9b4ac1fc0b10f73949fa916c7a6413f1dd4e31dc - pristine_git_object: b4bf06967824c3ac778856a8b32cb08a9dd980d6 + last_write_checksum: sha1:f3f1449053393f9bb4392d20e0c00b815a230e20 + pristine_git_object: 637f6d3cb76052768c2451e81ac0496c8b27aa34 + docs/components/signinterndaemonrequestmethod.mdx: + id: 43e07b7170f0 + last_write_checksum: sha1:8b4d6c38b0c8eb62202d8f31d853bac2da0e2981 + pristine_git_object: 3f4ae7426fc3bec4b84048ee50ebc8fd8c695809 docs/components/signinterndaemonresponse.mdx: id: e86dd4c94fe2 - last_write_checksum: sha1:ae1a817ee130d525983e7d42615ac7a64ba4cdff - pristine_git_object: d989162b01084a3c272851642eab332009f68512 + last_write_checksum: sha1:ada171d25c67a5185ea699b948746190ef5d6e5f + pristine_git_object: 704de49dc9f5c22c068603f429ddbb8d38be6454 docs/components/softdeny.mdx: id: d113e0c596b9 last_write_checksum: sha1:56c1888fc6437e170d31ceabfa505cc1aad87ce2 @@ -10264,8 +10272,8 @@ trackedFiles: pristine_git_object: 08c687694efbecf50406ae7929029d39fb121295 docs/sdks/interns/README.mdx: id: 2f8a053ffe78 - last_write_checksum: sha1:8008b93f37978808ea5c850f57a93653fd897da1 - pristine_git_object: b90fc698bfe2b3fc3fa0b06699a33e4e158aef22 + last_write_checksum: sha1:78ad14c524469b4c89d30d0a90867da355bd090d + pristine_git_object: a72d409627f77eb58be18f3f8ba3074a135d465a docs/sdks/models/README.mdx: id: 58f1ca464e0b last_write_checksum: sha1:aab5b254f0a6dc7ab7c6d543b20c889113cc0dc9 @@ -10340,8 +10348,8 @@ trackedFiles: pristine_git_object: 3e38f1a929f7d6b1d6de74604aa87e3d8f010544 pyproject.toml: id: 5d07e7d72637 - last_write_checksum: sha1:d9010c2b804870c3af08efc720a7a3a135591d08 - pristine_git_object: a6cf6662925f231ffe607ae14cdb7ed2d53bdae7 + last_write_checksum: sha1:7337e6a742ddf8c0eace51964400336fa6230295 + pristine_git_object: 8f7be67ffe7f60cb9210dcf954af115205edf7c6 scripts/prepare_readme.py: id: e0c5957a6035 last_write_checksum: sha1:77f44b60b98bc126557ec27391f91dfba764bb54 @@ -10368,8 +10376,8 @@ trackedFiles: pristine_git_object: 86713cfea633e09d33b3d4e65281071fe20e6137 src/openrouter/_version.py: id: d8d15ad6c586 - last_write_checksum: sha1:1ef3801c7751ad5b0de9b961109aadac386517df - pristine_git_object: 65d80334569ef2a43d3e4217f9cf6e5dcdc5e2b5 + last_write_checksum: sha1:3d286e29d6efe05e4e3008093b349ba5bf9358ed + pristine_git_object: a003753cca71e6a74f155937fea572fe184c3172 src/openrouter/alpha.py: id: 306c4d93308d last_write_checksum: sha1:30f55a360f41376ab194b9ea725fe4e001a5ae1a @@ -10416,8 +10424,8 @@ trackedFiles: pristine_git_object: ad3d247954547814054c01989a2dff3d12b3e4e1 src/openrouter/components/__init__.py: id: 81754e97b3f4 - last_write_checksum: sha1:83b51cf340e3e52b4877b2c5b3b59b1669acb3f8 - pristine_git_object: 2fe86e6fd9510e807aa92c8d0297dbe9292b1b3d + last_write_checksum: sha1:7b928639267c6cc16d05a08d4b77811103e843d6 + pristine_git_object: bc3bdb912faf2fdc73bbe4c57028467819b664a6 src/openrouter/components/aabenchmarkentry.py: id: e2e0f0b48c82 last_write_checksum: sha1:fab4d9a24d2cea937bb749d46c5f83941e99d65c @@ -12584,8 +12592,8 @@ trackedFiles: pristine_git_object: c31d1a78f74e7a11f48313316d479c48e247fbf1 src/openrouter/components/observabilitywebhookdestination.py: id: 2f942be86581 - last_write_checksum: sha1:747e2ed4b6109edb2f3fe13477841e468f624a5c - pristine_git_object: 2547f18848d56de28583de085ca7b43e6e96159c + last_write_checksum: sha1:501abf22f567b88f3950c2cd854105e464ecf3d8 + pristine_git_object: 86193307ec687026bf275fd0bf776f63a83535be src/openrouter/components/openaifile.py: id: fd021f0cb031 last_write_checksum: sha1:b44d0b18a4c9b119382e224786191e8d5c49960b @@ -13360,12 +13368,12 @@ trackedFiles: pristine_git_object: 418953ba7366a6015934bf8795178d79adb03b89 src/openrouter/components/signinterndaemonrequest.py: id: 20aab639ddf2 - last_write_checksum: sha1:eb60468372e72512d198e78705dbd254dafe56c9 - pristine_git_object: 4d2f78f63e022201fb7729a1e218a4c02a148ffc + last_write_checksum: sha1:bde362d81745729323ff18cbcb534a45c62fa37a + pristine_git_object: a5d555221fbfd5ef01a1468b341042d8d39faeb3 src/openrouter/components/signinterndaemonresponse.py: id: 206595537b76 - last_write_checksum: sha1:1903ab3a67f8695273bed9f3fe7e90b9f1aa83f2 - pristine_git_object: e44305da959380e177fcc2077d0e80ce4d522a57 + last_write_checksum: sha1:c0675834e1a8bd8f67620f8e2fc1232421ee720b + pristine_git_object: 43b66eaec7de82007ea1b29e60c86dc609cafa6b src/openrouter/components/speechinput.py: id: 14e46bea4b32 last_write_checksum: sha1:c6e320441ce7eaa95072d8796e97f082302bb326 @@ -14052,8 +14060,8 @@ trackedFiles: pristine_git_object: 50643a126668498dd668c7cceb9f78c03d413d32 src/openrouter/interns.py: id: d18df05c5c6d - last_write_checksum: sha1:0034247cc9ab55bae388b349c880f550c1c8d584 - pristine_git_object: cfee3dcdd1af583da4be969e51ee53bd43f60208 + last_write_checksum: sha1:0e26b094dfe3e143d023a778b2c5a9415a5a458f + pristine_git_object: 56198d2f56c59f52eed5b35f59d54b5ec1f4247b src/openrouter/models/__init__.py: id: ed73b93abb3f last_write_checksum: sha1:932a790ae66ccd7d7022b39c659bcf72a664ebea @@ -18982,6 +18990,4 @@ examples: "504": application/json: {"error": {"code": 504, "message": "Vault request timed out"}} examplesVersion: 1.0.2 -releaseNotes: | - ## Python SDK Changes: - * `open_router.vault.list_intern_connections()`: **Added** +releaseNotes: "## Python SDK Changes:\n* `open_router.interns.sign_intern_daemon_access_request()`: \n * `request.route` **Added**\n * `response` **Changed**\n* `open_router.interns.sign_intern_daemon_request()`: \n * `request.route` **Added**\n * `response` **Changed**\n" diff --git a/.speakeasy/gen.yaml b/.speakeasy/gen.yaml index 7c72c36ae..f298cd914 100644 --- a/.speakeasy/gen.yaml +++ b/.speakeasy/gen.yaml @@ -36,7 +36,7 @@ generation: documentation: mintlify preApplyUnionDiscriminators: true python: - version: 1.3.65 + version: 1.3.66 additionalDependencies: dev: {} main: {} diff --git a/.speakeasy/out.openapi.yaml b/.speakeasy/out.openapi.yaml index fc05cc128..82c168a4e 100644 --- a/.speakeasy/out.openapi.yaml +++ b/.speakeasy/out.openapi.yaml @@ -29854,6 +29854,24 @@ components: example: 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855' pattern: '^[0-9a-f]{64}$' type: 'string' + route: + additionalProperties: false + description: 'The daemon request the proof is for. When present the response also carries the single-use, route-bound proof (`x-ori-invoke-signature-v2`, `x-ori-invoke-nonce`).' + properties: + method: + description: 'The HTTP method of the daemon request.' + enum: + - 'POST' + type: 'string' + path: + description: 'The daemon request path, percent-encoded as sent, without origin or query. The route-bound proof admits only this path.' + example: '/api/invoke' + pattern: '^\/[!"$->@-~]{0,2047}$' + type: 'string' + required: + - 'method' + - 'path' + type: 'object' required: - 'bodySha256' type: 'object' @@ -29865,9 +29883,15 @@ components: x-ori-invoke-timestamp: '1789000000' x-ori-invoke-user: 'user_2abc' properties: + x-ori-invoke-nonce: + description: 'Present with `x-ori-invoke-signature-v2`: the single-use id that proof is bound to.' + type: 'string' x-ori-invoke-signature: description: 'Base64 Ed25519 signature over the intern id, timestamp, user and body digest.' type: 'string' + x-ori-invoke-signature-v2: + description: 'Present when the request named a `route`: Base64 Ed25519 signature over the intern id, timestamp, nonce, user, method, path and body digest. The intern accepts it once.' + type: 'string' x-ori-invoke-timestamp: description: 'Unix seconds at signing; the daemon refuses proofs older than its window.' type: 'string' @@ -43400,7 +43424,7 @@ paths: - $ref: "#/components/parameters/AppCategories" /interns/{internId}/daemon: get: - description: 'Returns the origin and daemon token that attach `ori tui --host` to one visible, running intern. The token is a credential: the response is sent with `Cache-Control: no-store`, and each reveal is logged by caller and intern. The API key selects the caller, workspace and visible interns. An intern''s own API key sees only that intern: the collection and every other intern answer 404 to it. There is no default workspace fallback. Requests on regional hostnames such as `eu.openrouter.ai` are refused. [API key](/docs/api-reference/authentication) required.' + description: 'Returns the origin and daemon token that attach `ori tui --host` to one visible, running intern. The token is a credential: only an OAuth-token caller (`ori login --oidc`) may read it, the response is sent with `Cache-Control: no-store`, and each reveal is logged by caller and intern. API keys get 403 `personal_identity_required`. The API key selects the caller, workspace and visible interns. An intern''s own API key sees only that intern: the collection and every other intern answer 404 to it. There is no default workspace fallback. Requests on regional hostnames such as `eu.openrouter.ai` are refused. [API key](/docs/api-reference/authentication) required.' operationId: 'getInternDaemon' parameters: - description: 'ID of an intern visible to the authenticated API key.' diff --git a/.speakeasy/workflow.lock b/.speakeasy/workflow.lock index 8fc4b0cbe..909f3ef4b 100644 --- a/.speakeasy/workflow.lock +++ b/.speakeasy/workflow.lock @@ -2,8 +2,8 @@ speakeasyVersion: 1.787.0 sources: OpenRouter API: sourceNamespace: open-router-chat-completions-api - sourceRevisionDigest: sha256:f4e39833826b4d8ecd08b96f825f301cadad81fdd5e6204b8b965cef04164b96 - sourceBlobDigest: sha256:50f36dd6ae42eee1e62fbb3a8963869260d5e271267089645576b1b4b16e385f + sourceRevisionDigest: sha256:6a01fa8140088735ccb9c5e5e79272410e4a8d64f9caa9756592c1d540feb4da + sourceBlobDigest: sha256:44dc586b67df101e5b115b16c8d6a2991c4488257eef039c3e1491f4af69437f tags: - latest - 1.0.0 @@ -11,10 +11,10 @@ targets: open-router: source: OpenRouter API sourceNamespace: open-router-chat-completions-api - sourceRevisionDigest: sha256:f4e39833826b4d8ecd08b96f825f301cadad81fdd5e6204b8b965cef04164b96 - sourceBlobDigest: sha256:50f36dd6ae42eee1e62fbb3a8963869260d5e271267089645576b1b4b16e385f + sourceRevisionDigest: sha256:6a01fa8140088735ccb9c5e5e79272410e4a8d64f9caa9756592c1d540feb4da + sourceBlobDigest: sha256:44dc586b67df101e5b115b16c8d6a2991c4488257eef039c3e1491f4af69437f codeSamplesNamespace: open-router-python-code-samples - codeSamplesRevisionDigest: sha256:0d63545d7f55ad59e205de8824045c5232a9efd8cb66da46c991b3aa64d68586 + codeSamplesRevisionDigest: sha256:14b00aec0efae7dcf67569be815b3772c0021a1e1eda7d404503d5de832ec122 workflow: workflowVersion: 1.0.0 speakeasyVersion: 1.787.0 diff --git a/RELEASES.md b/RELEASES.md index 32b3b92a9..dc787af08 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -3419,4 +3419,14 @@ Based on: ### Generated - [python v1.3.65] . ### Releases -- [PyPI v1.3.65] https://pypi.org/project/openrouter/1.3.65 - . \ No newline at end of file +- [PyPI v1.3.65] https://pypi.org/project/openrouter/1.3.65 - . + +## 2026-10-18 21:50:16 +### Changes +Based on: +- OpenAPI Doc +- Speakeasy CLI 1.787.0 (2.914.0) https://github.com/speakeasy-api/speakeasy +### Generated +- [python v1.3.66] . +### Releases +- [PyPI v1.3.66] https://pypi.org/project/openrouter/1.3.66 - . \ No newline at end of file diff --git a/docs/components/observabilitywebhookdestinationconfig.mdx b/docs/components/observabilitywebhookdestinationconfig.mdx index b05354574..b70eabd7b 100644 --- a/docs/components/observabilitywebhookdestinationconfig.mdx +++ b/docs/components/observabilitywebhookdestinationconfig.mdx @@ -4,8 +4,8 @@ title: "ObservabilityWebhookDestinationConfig" ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ | -| `headers` | Dict[str, *str*] | ➖ | N/A | -| `method` | [Optional[components.Method]](../components/method.mdx) | ➖ | N/A | -| `url` | *str* | ✅ | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | +| `headers` | Dict[str, *str*] | ➖ | N/A | +| `method` | [Optional[components.ObservabilityWebhookDestinationMethod]](../components/observabilitywebhookdestinationmethod.mdx) | ➖ | N/A | +| `url` | *str* | ✅ | N/A | \ No newline at end of file diff --git a/docs/components/method.mdx b/docs/components/observabilitywebhookdestinationmethod.mdx similarity index 54% rename from docs/components/method.mdx rename to docs/components/observabilitywebhookdestinationmethod.mdx index 90145e786..7e7dd924f 100644 --- a/docs/components/method.mdx +++ b/docs/components/observabilitywebhookdestinationmethod.mdx @@ -1,14 +1,14 @@ --- -title: "Method" +title: "ObservabilityWebhookDestinationMethod" --- ## Example Usage ```python -from openrouter.components import Method +from openrouter.components import ObservabilityWebhookDestinationMethod # Open enum: unrecognized values are captured as UnrecognizedStr -value: Method = "POST" +value: ObservabilityWebhookDestinationMethod = "POST" ``` diff --git a/docs/components/route.mdx b/docs/components/route.mdx new file mode 100644 index 000000000..5ae3ea59d --- /dev/null +++ b/docs/components/route.mdx @@ -0,0 +1,13 @@ +--- +title: "Route" +--- + +The daemon request the proof is for. When present the response also carries the single-use, route-bound proof (`x-ori-invoke-signature-v2`, `x-ori-invoke-nonce`). + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | +| `method` | [components.SignInternDaemonRequestMethod](../components/signinterndaemonrequestmethod.mdx) | ✅ | The HTTP method of the daemon request. | | +| `path` | *str* | ✅ | The daemon request path, percent-encoded as sent, without origin or query. The route-bound proof admits only this path. | /api/invoke | \ No newline at end of file diff --git a/docs/components/signinterndaemonrequest.mdx b/docs/components/signinterndaemonrequest.mdx index 5ed4ce9b1..9e1398349 100644 --- a/docs/components/signinterndaemonrequest.mdx +++ b/docs/components/signinterndaemonrequest.mdx @@ -4,6 +4,7 @@ title: "SignInternDaemonRequest" ## Fields -| Field | Type | Required | Description | Example | -| --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | -| `body_sha256` | *str* | ✅ | Lower-case hex SHA-256 of the exact bytes the CLI will send as the daemon request body. | e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `body_sha256` | *str* | ✅ | Lower-case hex SHA-256 of the exact bytes the CLI will send as the daemon request body. | e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 | +| `route` | [Optional[components.Route]](../components/route.mdx) | ➖ | The daemon request the proof is for. When present the response also carries the single-use, route-bound proof (`x-ori-invoke-signature-v2`, `x-ori-invoke-nonce`). | | \ No newline at end of file diff --git a/docs/components/signinterndaemonrequestmethod.mdx b/docs/components/signinterndaemonrequestmethod.mdx new file mode 100644 index 000000000..3f4ae7426 --- /dev/null +++ b/docs/components/signinterndaemonrequestmethod.mdx @@ -0,0 +1,17 @@ +--- +title: "SignInternDaemonRequestMethod" +--- + +The HTTP method of the daemon request. + +## Example Usage + +```python +from openrouter.components import SignInternDaemonRequestMethod +value: SignInternDaemonRequestMethod = "POST" +``` + + +## Values + +- `"POST"` diff --git a/docs/components/signinterndaemonresponse.mdx b/docs/components/signinterndaemonresponse.mdx index 5da8e2eeb..3b1cad78e 100644 --- a/docs/components/signinterndaemonresponse.mdx +++ b/docs/components/signinterndaemonresponse.mdx @@ -7,8 +7,10 @@ Headers the CLI copies onto the daemon request so the sidecar can verify who is ## Fields -| Field | Type | Required | Description | -| ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | -| `x_ori_invoke_signature` | *str* | ✅ | Base64 Ed25519 signature over the intern id, timestamp, user and body digest. | -| `x_ori_invoke_timestamp` | *str* | ✅ | Unix seconds at signing; the daemon refuses proofs older than its window. | -| `x_ori_invoke_user` | *str* | ✅ | The verified OAuth subject the proof names. Never taken from the request. | \ No newline at end of file +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `x_ori_invoke_nonce` | *Optional[str]* | ➖ | Present with `x-ori-invoke-signature-v2`: the single-use id that proof is bound to. | +| `x_ori_invoke_signature` | *str* | ✅ | Base64 Ed25519 signature over the intern id, timestamp, user and body digest. | +| `x_ori_invoke_signature_v2` | *Optional[str]* | ➖ | Present when the request named a `route`: Base64 Ed25519 signature over the intern id, timestamp, nonce, user, method, path and body digest. The intern accepts it once. | +| `x_ori_invoke_timestamp` | *str* | ✅ | Unix seconds at signing; the daemon refuses proofs older than its window. | +| `x_ori_invoke_user` | *str* | ✅ | The verified OAuth subject the proof names. Never taken from the request. | \ No newline at end of file diff --git a/docs/sdks/interns/README.mdx b/docs/sdks/interns/README.mdx index a7bd746bb..c2bf0c73f 100644 --- a/docs/sdks/interns/README.mdx +++ b/docs/sdks/interns/README.mdx @@ -274,7 +274,7 @@ with OpenRouter( ## get_intern_daemon -Returns the origin and daemon token that attach `ori tui --host` to one visible, running intern. The token is a credential: the response is sent with `Cache-Control: no-store`, and each reveal is logged by caller and intern. The API key selects the caller, workspace and visible interns. An intern's own API key sees only that intern: the collection and every other intern answer 404 to it. There is no default workspace fallback. Requests on regional hostnames such as `eu.openrouter.ai` are refused. [API key](/docs/api-reference/authentication) required. +Returns the origin and daemon token that attach `ori tui --host` to one visible, running intern. The token is a credential: only an OAuth-token caller (`ori login --oidc`) may read it, the response is sent with `Cache-Control: no-store`, and each reveal is logged by caller and intern. API keys get 403 `personal_identity_required`. The API key selects the caller, workspace and visible interns. An intern's own API key sees only that intern: the collection and every other intern answer 404 to it. There is no default workspace fallback. Requests on regional hostnames such as `eu.openrouter.ai` are refused. [API key](/docs/api-reference/authentication) required. ### Example Usage @@ -397,14 +397,15 @@ with OpenRouter( ### Parameters -| Parameter | Type | Required | Description | Example | -| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | -| `intern_id` | *str* | ✅ | ID of an intern visible to the authenticated API key. | 7c9e6679-7425-40de-944b-e07fc1f90ae7 | -| `body_sha256` | *str* | ✅ | Lower-case hex SHA-256 of the exact bytes the CLI will send as the daemon request body. | e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 | -| `http_referer` | *Optional[str]* | ➖ | The app identifier should be your app's URL and is used as the primary identifier for rankings.
This is used to track API usage per application.
| | -| `x_open_router_title` | *Optional[str]* | ➖ | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| | -| `x_open_router_categories` | *Optional[str]* | ➖ | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| | -| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | ➖ | Configuration to override the default retry behavior of the client. | | +| Parameter | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `intern_id` | *str* | ✅ | ID of an intern visible to the authenticated API key. | 7c9e6679-7425-40de-944b-e07fc1f90ae7 | +| `body_sha256` | *str* | ✅ | Lower-case hex SHA-256 of the exact bytes the CLI will send as the daemon request body. | e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 | +| `http_referer` | *Optional[str]* | ➖ | The app identifier should be your app's URL and is used as the primary identifier for rankings.
This is used to track API usage per application.
| | +| `x_open_router_title` | *Optional[str]* | ➖ | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| | +| `x_open_router_categories` | *Optional[str]* | ➖ | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| | +| `route` | [Optional[components.Route]](../../components/route.mdx) | ➖ | The daemon request the proof is for. When present the response also carries the single-use, route-bound proof (`x-ori-invoke-signature-v2`, `x-ori-invoke-nonce`). | | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | ➖ | Configuration to override the default retry behavior of the client. | | ### Response @@ -446,14 +447,15 @@ with OpenRouter( ### Parameters -| Parameter | Type | Required | Description | Example | -| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | -| `intern_id` | *str* | ✅ | ID of an intern visible to the authenticated API key. | 7c9e6679-7425-40de-944b-e07fc1f90ae7 | -| `body_sha256` | *str* | ✅ | Lower-case hex SHA-256 of the exact bytes the CLI will send as the daemon request body. | e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 | -| `http_referer` | *Optional[str]* | ➖ | The app identifier should be your app's URL and is used as the primary identifier for rankings.
This is used to track API usage per application.
| | -| `x_open_router_title` | *Optional[str]* | ➖ | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| | -| `x_open_router_categories` | *Optional[str]* | ➖ | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| | -| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | ➖ | Configuration to override the default retry behavior of the client. | | +| Parameter | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `intern_id` | *str* | ✅ | ID of an intern visible to the authenticated API key. | 7c9e6679-7425-40de-944b-e07fc1f90ae7 | +| `body_sha256` | *str* | ✅ | Lower-case hex SHA-256 of the exact bytes the CLI will send as the daemon request body. | e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 | +| `http_referer` | *Optional[str]* | ➖ | The app identifier should be your app's URL and is used as the primary identifier for rankings.
This is used to track API usage per application.
| | +| `x_open_router_title` | *Optional[str]* | ➖ | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| | +| `x_open_router_categories` | *Optional[str]* | ➖ | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| | +| `route` | [Optional[components.Route]](../../components/route.mdx) | ➖ | The daemon request the proof is for. When present the response also carries the single-use, route-bound proof (`x-ori-invoke-signature-v2`, `x-ori-invoke-nonce`). | | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | ➖ | Configuration to override the default retry behavior of the client. | | ### Response diff --git a/pyproject.toml b/pyproject.toml index a6cf66629..8f7be67ff 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "openrouter" -version = "1.3.65" +version = "1.3.66" description = "Official Python Client SDK for OpenRouter." authors = [{ name = "OpenRouter" },] readme = "README-PYPI.md" diff --git a/src/openrouter/_version.py b/src/openrouter/_version.py index 65d803345..a003753cc 100644 --- a/src/openrouter/_version.py +++ b/src/openrouter/_version.py @@ -3,10 +3,10 @@ import importlib.metadata __title__: str = "openrouter" -__version__: str = "1.3.65" +__version__: str = "1.3.66" __openapi_doc_version__: str = "1.0.0" __gen_version__: str = "2.914.0" -__user_agent__: str = "speakeasy-sdk/python 1.3.65 2.914.0 1.0.0 openrouter" +__user_agent__: str = "speakeasy-sdk/python 1.3.66 2.914.0 1.0.0 openrouter" try: if __package__ is not None: diff --git a/src/openrouter/components/__init__.py b/src/openrouter/components/__init__.py index 2fe86e6fd..bc3bdb912 100644 --- a/src/openrouter/components/__init__.py +++ b/src/openrouter/components/__init__.py @@ -2944,10 +2944,10 @@ ObservabilityWeaveDestinationTypedDict, ) from .observabilitywebhookdestination import ( - Method, ObservabilityWebhookDestination, ObservabilityWebhookDestinationConfig, ObservabilityWebhookDestinationConfigTypedDict, + ObservabilityWebhookDestinationMethod, ObservabilityWebhookDestinationType, ObservabilityWebhookDestinationTypedDict, ) @@ -3956,7 +3956,10 @@ ShellServerToolEnvironmentTypedDict, ) from .signinterndaemonrequest import ( + Route, + RouteTypedDict, SignInternDaemonRequest, + SignInternDaemonRequestMethod, SignInternDaemonRequestTypedDict, ) from .signinterndaemonresponse import ( @@ -6346,7 +6349,6 @@ "MessagesToolRemovalBlockTypeToolReference", "MessagesToolRemovalBlockTypedDict", "MetadataLevel", - "Method", "MismatchBehavior", "Modality", "Mode", @@ -6528,6 +6530,7 @@ "ObservabilityWebhookDestination", "ObservabilityWebhookDestinationConfig", "ObservabilityWebhookDestinationConfigTypedDict", + "ObservabilityWebhookDestinationMethod", "ObservabilityWebhookDestinationType", "ObservabilityWebhookDestinationTypedDict", "OnError", @@ -7145,6 +7148,8 @@ "ResultError", "ResultErrorTypedDict", "ResultTypedDict", + "Route", + "RouteTypedDict", "RoutedServiceTier", "RouterAttempt", "RouterAttemptTypedDict", @@ -7258,6 +7263,7 @@ "ShellServerToolType", "ShellServerToolTypedDict", "SignInternDaemonRequest", + "SignInternDaemonRequestMethod", "SignInternDaemonRequestTypedDict", "SignInternDaemonResponse", "SignInternDaemonResponseTypedDict", @@ -9925,10 +9931,10 @@ "ObservabilityWeaveDestinationConfigTypedDict": ".observabilityweavedestination", "ObservabilityWeaveDestinationType": ".observabilityweavedestination", "ObservabilityWeaveDestinationTypedDict": ".observabilityweavedestination", - "Method": ".observabilitywebhookdestination", "ObservabilityWebhookDestination": ".observabilitywebhookdestination", "ObservabilityWebhookDestinationConfig": ".observabilitywebhookdestination", "ObservabilityWebhookDestinationConfigTypedDict": ".observabilitywebhookdestination", + "ObservabilityWebhookDestinationMethod": ".observabilitywebhookdestination", "ObservabilityWebhookDestinationType": ".observabilitywebhookdestination", "ObservabilityWebhookDestinationTypedDict": ".observabilitywebhookdestination", "OpenAIFile": ".openaifile", @@ -10672,7 +10678,10 @@ "ShellServerToolEngine": ".shellservertoolengine", "ShellServerToolEnvironment": ".shellservertoolenvironment", "ShellServerToolEnvironmentTypedDict": ".shellservertoolenvironment", + "Route": ".signinterndaemonrequest", + "RouteTypedDict": ".signinterndaemonrequest", "SignInternDaemonRequest": ".signinterndaemonrequest", + "SignInternDaemonRequestMethod": ".signinterndaemonrequest", "SignInternDaemonRequestTypedDict": ".signinterndaemonrequest", "SignInternDaemonResponse": ".signinterndaemonresponse", "SignInternDaemonResponseTypedDict": ".signinterndaemonresponse", diff --git a/src/openrouter/components/observabilitywebhookdestination.py b/src/openrouter/components/observabilitywebhookdestination.py index 2547f1884..86193307e 100644 --- a/src/openrouter/components/observabilitywebhookdestination.py +++ b/src/openrouter/components/observabilitywebhookdestination.py @@ -12,7 +12,7 @@ from typing_extensions import NotRequired, TypedDict -Method = Union[ +ObservabilityWebhookDestinationMethod = Union[ Literal[ "POST", "PUT", @@ -24,7 +24,7 @@ class ObservabilityWebhookDestinationConfigTypedDict(TypedDict): url: str headers: NotRequired[Dict[str, str]] - method: NotRequired[Method] + method: NotRequired[ObservabilityWebhookDestinationMethod] class ObservabilityWebhookDestinationConfig(BaseModel): @@ -32,7 +32,7 @@ class ObservabilityWebhookDestinationConfig(BaseModel): headers: Optional[Dict[str, str]] = None - method: Optional[Method] = "POST" + method: Optional[ObservabilityWebhookDestinationMethod] = "POST" @model_serializer(mode="wrap") def serialize_model(self, handler): diff --git a/src/openrouter/components/signinterndaemonrequest.py b/src/openrouter/components/signinterndaemonrequest.py index 4d2f78f63..a5d555221 100644 --- a/src/openrouter/components/signinterndaemonrequest.py +++ b/src/openrouter/components/signinterndaemonrequest.py @@ -1,20 +1,66 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from openrouter.types import BaseModel +from openrouter.types import BaseModel, UNSET_SENTINEL import pydantic -from typing_extensions import Annotated, TypedDict +from pydantic import model_serializer +from typing import Literal, Optional +from typing_extensions import Annotated, NotRequired, TypedDict + + +SignInternDaemonRequestMethod = Literal["POST",] +r"""The HTTP method of the daemon request.""" + + +class RouteTypedDict(TypedDict): + r"""The daemon request the proof is for. When present the response also carries the single-use, route-bound proof (`x-ori-invoke-signature-v2`, `x-ori-invoke-nonce`).""" + + method: SignInternDaemonRequestMethod + r"""The HTTP method of the daemon request.""" + path: str + r"""The daemon request path, percent-encoded as sent, without origin or query. The route-bound proof admits only this path.""" + + +class Route(BaseModel): + r"""The daemon request the proof is for. When present the response also carries the single-use, route-bound proof (`x-ori-invoke-signature-v2`, `x-ori-invoke-nonce`).""" + + method: SignInternDaemonRequestMethod + r"""The HTTP method of the daemon request.""" + + path: str + r"""The daemon request path, percent-encoded as sent, without origin or query. The route-bound proof admits only this path.""" class SignInternDaemonRequestTypedDict(TypedDict): body_sha256: str r"""Lower-case hex SHA-256 of the exact bytes the CLI will send as the daemon request body.""" + route: NotRequired[RouteTypedDict] + r"""The daemon request the proof is for. When present the response also carries the single-use, route-bound proof (`x-ori-invoke-signature-v2`, `x-ori-invoke-nonce`).""" class SignInternDaemonRequest(BaseModel): body_sha256: Annotated[str, pydantic.Field(alias="bodySha256")] r"""Lower-case hex SHA-256 of the exact bytes the CLI will send as the daemon request body.""" + route: Optional[Route] = None + r"""The daemon request the proof is for. When present the response also carries the single-use, route-bound proof (`x-ori-invoke-signature-v2`, `x-ori-invoke-nonce`).""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["route"]) + 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: SignInternDaemonRequest.model_rebuild() diff --git a/src/openrouter/components/signinterndaemonresponse.py b/src/openrouter/components/signinterndaemonresponse.py index e44305da9..43b66eaec 100644 --- a/src/openrouter/components/signinterndaemonresponse.py +++ b/src/openrouter/components/signinterndaemonresponse.py @@ -1,9 +1,11 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from openrouter.types import BaseModel +from openrouter.types import BaseModel, UNSET_SENTINEL import pydantic -from typing_extensions import Annotated, TypedDict +from pydantic import model_serializer +from typing import Optional +from typing_extensions import Annotated, NotRequired, TypedDict class SignInternDaemonResponseTypedDict(TypedDict): @@ -15,6 +17,10 @@ class SignInternDaemonResponseTypedDict(TypedDict): r"""Unix seconds at signing; the daemon refuses proofs older than its window.""" x_ori_invoke_user: str r"""The verified OAuth subject the proof names. Never taken from the request.""" + x_ori_invoke_nonce: NotRequired[str] + r"""Present with `x-ori-invoke-signature-v2`: the single-use id that proof is bound to.""" + x_ori_invoke_signature_v2: NotRequired[str] + r"""Present when the request named a `route`: Base64 Ed25519 signature over the intern id, timestamp, nonce, user, method, path and body digest. The intern accepts it once.""" class SignInternDaemonResponse(BaseModel): @@ -33,6 +39,32 @@ class SignInternDaemonResponse(BaseModel): x_ori_invoke_user: Annotated[str, pydantic.Field(alias="x-ori-invoke-user")] r"""The verified OAuth subject the proof names. Never taken from the request.""" + x_ori_invoke_nonce: Annotated[ + Optional[str], pydantic.Field(alias="x-ori-invoke-nonce") + ] = None + r"""Present with `x-ori-invoke-signature-v2`: the single-use id that proof is bound to.""" + + x_ori_invoke_signature_v2: Annotated[ + Optional[str], pydantic.Field(alias="x-ori-invoke-signature-v2") + ] = None + r"""Present when the request named a `route`: Base64 Ed25519 signature over the intern id, timestamp, nonce, user, method, path and body digest. The intern accepts it once.""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["x-ori-invoke-nonce", "x-ori-invoke-signature-v2"]) + 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: SignInternDaemonResponse.model_rebuild() diff --git a/src/openrouter/interns.py b/src/openrouter/interns.py index cfee3dcdd..56198d2f5 100644 --- a/src/openrouter/interns.py +++ b/src/openrouter/interns.py @@ -1463,7 +1463,7 @@ def get_intern_daemon( ) -> components.InternDaemonAccess: r"""Get an intern's daemon access - Returns the origin and daemon token that attach `ori tui --host` to one visible, running intern. The token is a credential: the response is sent with `Cache-Control: no-store`, and each reveal is logged by caller and intern. The API key selects the caller, workspace and visible interns. An intern's own API key sees only that intern: the collection and every other intern answer 404 to it. There is no default workspace fallback. Requests on regional hostnames such as `eu.openrouter.ai` are refused. [API key](/docs/api-reference/authentication) required. + Returns the origin and daemon token that attach `ori tui --host` to one visible, running intern. The token is a credential: only an OAuth-token caller (`ori login --oidc`) may read it, the response is sent with `Cache-Control: no-store`, and each reveal is logged by caller and intern. API keys get 403 `personal_identity_required`. The API key selects the caller, workspace and visible interns. An intern's own API key sees only that intern: the collection and every other intern answer 404 to it. There is no default workspace fallback. Requests on regional hostnames such as `eu.openrouter.ai` are refused. [API key](/docs/api-reference/authentication) required. If set, this operation will use `api_key` from the global security. @@ -1591,7 +1591,7 @@ async def get_intern_daemon_async( ) -> components.InternDaemonAccess: r"""Get an intern's daemon access - Returns the origin and daemon token that attach `ori tui --host` to one visible, running intern. The token is a credential: the response is sent with `Cache-Control: no-store`, and each reveal is logged by caller and intern. The API key selects the caller, workspace and visible interns. An intern's own API key sees only that intern: the collection and every other intern answer 404 to it. There is no default workspace fallback. Requests on regional hostnames such as `eu.openrouter.ai` are refused. [API key](/docs/api-reference/authentication) required. + Returns the origin and daemon token that attach `ori tui --host` to one visible, running intern. The token is a credential: only an OAuth-token caller (`ori login --oidc`) may read it, the response is sent with `Cache-Control: no-store`, and each reveal is logged by caller and intern. API keys get 403 `personal_identity_required`. The API key selects the caller, workspace and visible interns. An intern's own API key sees only that intern: the collection and every other intern answer 404 to it. There is no default workspace fallback. Requests on regional hostnames such as `eu.openrouter.ai` are refused. [API key](/docs/api-reference/authentication) required. If set, this operation will use `api_key` from the global security. @@ -1978,6 +1978,7 @@ def sign_intern_daemon_access_request( http_referer: Optional[str] = None, x_open_router_title: Optional[str] = None, x_open_router_categories: Optional[str] = None, + route: Optional[Union[components.Route, components.RouteTypedDict]] = None, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, @@ -1998,6 +1999,7 @@ def sign_intern_daemon_access_request( :param x_open_router_categories: Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings. + :param route: The daemon request the proof is for. When present the response also carries the single-use, route-bound proof (`x-ori-invoke-signature-v2`, `x-ori-invoke-nonce`). :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 @@ -2020,6 +2022,7 @@ def sign_intern_daemon_access_request( intern_id=intern_id, sign_intern_daemon_request=components.SignInternDaemonRequest( body_sha256=body_sha256, + route=utils.get_pydantic_model(route, Optional[components.Route]), ), ) @@ -2133,6 +2136,7 @@ async def sign_intern_daemon_access_request_async( http_referer: Optional[str] = None, x_open_router_title: Optional[str] = None, x_open_router_categories: Optional[str] = None, + route: Optional[Union[components.Route, components.RouteTypedDict]] = None, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, @@ -2153,6 +2157,7 @@ async def sign_intern_daemon_access_request_async( :param x_open_router_categories: Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings. + :param route: The daemon request the proof is for. When present the response also carries the single-use, route-bound proof (`x-ori-invoke-signature-v2`, `x-ori-invoke-nonce`). :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 @@ -2175,6 +2180,7 @@ async def sign_intern_daemon_access_request_async( intern_id=intern_id, sign_intern_daemon_request=components.SignInternDaemonRequest( body_sha256=body_sha256, + route=utils.get_pydantic_model(route, Optional[components.Route]), ), ) @@ -2285,6 +2291,7 @@ def sign_intern_daemon_request( http_referer: Optional[str] = None, x_open_router_title: Optional[str] = None, x_open_router_categories: Optional[str] = None, + route: Optional[Union[components.Route, components.RouteTypedDict]] = None, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, @@ -2305,6 +2312,7 @@ def sign_intern_daemon_request( :param x_open_router_categories: Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings. + :param route: The daemon request the proof is for. When present the response also carries the single-use, route-bound proof (`x-ori-invoke-signature-v2`, `x-ori-invoke-nonce`). :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 @@ -2327,6 +2335,7 @@ def sign_intern_daemon_request( intern_id=intern_id, sign_intern_daemon_request=components.SignInternDaemonRequest( body_sha256=body_sha256, + route=utils.get_pydantic_model(route, Optional[components.Route]), ), ) @@ -2437,6 +2446,7 @@ async def sign_intern_daemon_request_async( http_referer: Optional[str] = None, x_open_router_title: Optional[str] = None, x_open_router_categories: Optional[str] = None, + route: Optional[Union[components.Route, components.RouteTypedDict]] = None, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, @@ -2457,6 +2467,7 @@ async def sign_intern_daemon_request_async( :param x_open_router_categories: Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings. + :param route: The daemon request the proof is for. When present the response also carries the single-use, route-bound proof (`x-ori-invoke-signature-v2`, `x-ori-invoke-nonce`). :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 @@ -2479,6 +2490,7 @@ async def sign_intern_daemon_request_async( intern_id=intern_id, sign_intern_daemon_request=components.SignInternDaemonRequest( body_sha256=body_sha256, + route=utils.get_pydantic_model(route, Optional[components.Route]), ), ) diff --git a/uv.lock b/uv.lock index b60de3131..9cdf2fd7d 100644 --- a/uv.lock +++ b/uv.lock @@ -213,7 +213,7 @@ wheels = [ [[package]] name = "openrouter" -version = "1.3.65" +version = "1.3.66" source = { editable = "." } dependencies = [ { name = "httpcore" },