Skip to content

release: 0.37.0#110

Open
stainless-app[bot] wants to merge 27 commits intomainfrom
release-please--branches--main--changes--next
Open

release: 0.37.0#110
stainless-app[bot] wants to merge 27 commits intomainfrom
release-please--branches--main--changes--next

Conversation

@stainless-app
Copy link
Copy Markdown
Contributor

@stainless-app stainless-app bot commented Mar 20, 2026

Automated Release PR

0.37.0 (2026-04-08)

Full Changelog: v0.36.0...v0.37.0

Features

Bug Fixes

  • client: preserve hardcoded query params when merging with user params (c314c08)
  • sanitize endpoint path params (b2b3ca2)

Chores

  • ci: skip lint on metadata-only changes (b5a6b2d)
  • internal: update gitignore (8f27c46)
  • tests: bump steady to v0.19.4 (a855b0a)
  • tests: bump steady to v0.19.5 (7ea97c0)
  • tests: bump steady to v0.19.6 (1ecd0bf)
  • tests: bump steady to v0.19.7 (466a814)
  • tests: bump steady to v0.20.1 (74c3b3b)
  • tests: bump steady to v0.20.2 (3eb71a2)

Refactors

  • tests: switch from prism to steady (441e854)

This pull request is managed by Stainless's GitHub App.

The semver version number is based on included commit messages. Alternatively, you can manually set the version number in the title of this pull request.

For a better experience, it is recommended to use either rebase-merge or squash-merge when merging this pull request.

🔗 Stainless website
📚 Read the docs
🙋 Reach out for help or questions

@stainless-app
Copy link
Copy Markdown
Contributor Author

stainless-app bot commented Mar 20, 2026

🧪 Testing

To try out this version of the SDK:

pip install 'https://pkg.stainless.com/s/hyperspell-python/c314c08b0c99131cd98a404ede9416d6c3ff47e3/hyperspell-0.36.0-py3-none-any.whl'

Expires at: Fri, 08 May 2026 05:14:52 GMT
Updated at: Wed, 08 Apr 2026 05:14:52 GMT

@stainless-app stainless-app bot force-pushed the release-please--branches--main--changes--next branch from 0a683c7 to c11de29 Compare March 20, 2026 03:53
@canaries-inc
Copy link
Copy Markdown

canaries-inc bot commented Mar 20, 2026

Canary encountered an internal error while analyzing this PR.

@stainless-app stainless-app bot force-pushed the release-please--branches--main--changes--next branch from c11de29 to e79b8eb Compare March 21, 2026 05:08
@entelligence-ai-pr-reviews
Copy link
Copy Markdown



Confidence Score: 5/5 - Safe to Merge

  • No new review comments were generated, indicating the PR is clean from an automated review perspective.
  • No critical, significant, or high-risk issues were identified in the heuristic analysis.
  • 12 out of 16 changed files were reviewed with no issues found, providing good coverage confidence.
  • No existing unresolved comments that could indicate lingering concerns.

@stainless-app stainless-app bot force-pushed the release-please--branches--main--changes--next branch from e79b8eb to 0a0e812 Compare March 21, 2026 05:14
@entelligence-ai-pr-reviews
Copy link
Copy Markdown



Confidence Score: 5/5 - Safe to Merge

  • No new review comments were generated, indicating the PR is clean from an automated review perspective.
  • No critical, significant, or high-risk issues were identified in the heuristic analysis.
  • 12 out of 16 changed files were reviewed with zero issues found, providing good coverage confidence.
  • No existing unresolved comments to consider, so there are no outstanding concerns blocking the merge.

@stainless-app stainless-app bot force-pushed the release-please--branches--main--changes--next branch from 0a0e812 to df02664 Compare March 21, 2026 21:30
@stainless-app stainless-app bot changed the title release: 0.36.1 release: 0.37.0 Mar 21, 2026
@stainless-app stainless-app bot force-pushed the release-please--branches--main--changes--next branch from df02664 to eed16a8 Compare March 21, 2026 21:30
@entelligence-ai-pr-reviews
Copy link
Copy Markdown



Confidence Score: 5/5 - Safe to Merge

  • No new review comments were generated, indicating the PR appears clean from an automated analysis perspective.
  • No critical, significant, or high-risk issues were identified in the heuristic analysis.
  • 26 out of 30 changed files were reviewed, providing good coverage with no issues found.
  • No existing unresolved comments that would block merging.

@entelligence-ai-pr-reviews
Copy link
Copy Markdown



Confidence Score: 5/5 - Safe to Merge

  • No new review comments were generated, indicating a clean PR with no identified issues
  • No existing unresolved comments to consider
  • High coverage with 26/30 changed files reviewed, providing good confidence in the assessment
  • Heuristic analysis shows zero critical, significant, or medium issues detected

@stainless-app stainless-app bot force-pushed the release-please--branches--main--changes--next branch from eed16a8 to 5e6ff5c Compare March 23, 2026 22:30
@entelligence-ai-pr-reviews
Copy link
Copy Markdown



Confidence Score: 5/5 - Safe to Merge

  • No new review comments were generated, indicating the PR is clean with no identified issues.
  • Zero critical, significant, or medium issues were flagged by the heuristic analysis.
  • High coverage of 26/30 changed files were reviewed, providing good confidence in the assessment.
  • No existing unresolved comments that could indicate lingering concerns.

@stainless-app stainless-app bot force-pushed the release-please--branches--main--changes--next branch from 5e6ff5c to 4dd9085 Compare March 24, 2026 05:10
@entelligence-ai-pr-reviews
Copy link
Copy Markdown



Confidence Score: 5/5 - Safe to Merge

  • No critical or significant issues found
  • 26/31 changed files reviewed (84% coverage)

@stainless-app stainless-app bot force-pushed the release-please--branches--main--changes--next branch from 4dd9085 to 8496f01 Compare March 24, 2026 05:17
@entelligence-ai-pr-reviews
Copy link
Copy Markdown



Confidence Score: 5/5 - Safe to Merge

  • No critical or significant issues found
  • 26/31 changed files reviewed (84% coverage)

@stainless-app stainless-app bot force-pushed the release-please--branches--main--changes--next branch from 8496f01 to efbb978 Compare March 24, 2026 17:30
@stainless-app stainless-app bot force-pushed the release-please--branches--main--changes--next branch from 94f6a6e to c6b5480 Compare March 31, 2026 18:31
@entelligence-ai-pr-reviews
Copy link
Copy Markdown


Confidence Score: 5/5 - Safe to Merge

Safe to merge — this PR cleanly introduces path_template() in src/hyperspell/_utils/_path.py for RFC 3986-compliant URI construction and migrates the CI mock server from @stainless-api/prism-cli to @stdy/cli with updated health check endpoints at /_x-steady/health. No review comments were generated across the 30 reviewed files, and the changes are well-scoped with clear separation between the new utility module and the mechanical replacement of f-string URL interpolations. The CI scripting changes in scripts/mock and scripts/test are straightforward polling updates with no logic regressions introduced.

Key Findings:

  • The new src/hyperspell/_utils/_path.py module introduces a dedicated path_template() utility that centralizes URI construction, replacing ad-hoc f-string interpolation across resource files — this improves consistency and reduces the risk of malformed URLs.
  • The mock server migration from Prism to Steady (@stdy/cli v0.19.7) is a contained change limited to CI scripts, with the health check endpoint update to /_x-steady/health being the only behavioral delta, posing negligible runtime risk to production code.
  • Zero review comments were generated across 30 of 36 changed files, and the heuristic analysis found no critical, significant, or medium issues, supporting a clean merge signal.
  • The 6 uncovered files out of 36 changed represent a minor gap in automated review coverage, but given the mechanical nature of the f-string-to-path_template() substitutions, this is unlikely to hide defects.
Files requiring special attention
  • src/hyperspell/_utils/_path.py
  • scripts/mock
  • scripts/test

@stainless-app stainless-app bot force-pushed the release-please--branches--main--changes--next branch from c6b5480 to c446dd3 Compare April 1, 2026 08:55
@stainless-app stainless-app bot force-pushed the release-please--branches--main--changes--next branch from c446dd3 to d59192f Compare April 1, 2026 08:59
@stainless-app stainless-app bot force-pushed the release-please--branches--main--changes--next branch from d59192f to fc13909 Compare April 2, 2026 18:23
@entelligence-ai-pr-reviews
Copy link
Copy Markdown


Confidence Score: 5/5 - Safe to Merge

Safe to merge — this release PR for hyperspell v0.37.0 introduces well-scoped additions including Gmail Actions integration literals across type models, a path_template utility in src/hyperspell/_utils/_path.py for RFC 3986-compliant URI construction, and a mock server migration from Prism to Steady. No review comments were generated and heuristic analysis surfaced zero critical, significant, or medium issues across the 30 reviewed files. The changes appear to be additive and low-risk, primarily consisting of string literal expansions to existing union types and a new utility function with dot-segment validation.

Key Findings:

  • The addition of 'gmail_actions' as a valid literal across source, provider, integration, and type fields is a purely additive change to existing union types with no breaking impact on existing consumers.
  • The new path_template utility in src/hyperspell/_utils/_path.py is exported cleanly via _utils/__init__, following the established module pattern, and its RFC 3986 compliance focus suggests defensive implementation.
  • Zero review comments were generated and all heuristic severity tiers (critical, significant, high-risk, medium, low) returned empty — the automated analysis found no substantive issues in the diff.
  • The mock server migration from Prism to Steady is an infrastructure-level test tooling change that carries low production risk and does not affect library behavior for end users.
Files requiring special attention
  • src/hyperspell/_utils/_path.py
  • src/hyperspell/_utils/__init__.py

@stainless-app stainless-app bot force-pushed the release-please--branches--main--changes--next branch 2 times, most recently from b9351a8 to 91740f5 Compare April 2, 2026 18:27
@entelligence-ai-pr-reviews
Copy link
Copy Markdown


Confidence Score: 5/5 - Safe to Merge

Safe to merge — this PR cleanly releases v0.37.0 of the Hyperspell Python SDK with no issues identified across the reviewed files. The migration from Prism to Steady mock server tooling, the addition of the RFC 3986-compliant path_template utility in src/hyperspell/_utils/_path.py, and the expanded API surface for Gmail Actions and new search parameters all appear well-structured. No review comments were generated, no pre-existing unresolved concerns are flagged, and coverage reached 30 of 36 changed files with zero critical, significant, or medium issues surfaced.

Key Findings:

  • The new path_template function in src/hyperspell/_utils/_path.py introduces RFC 3986-compliant URL path templating with dot-segment injection handling, and no logic or security issues were identified in its implementation.
  • The mock server tooling swap from @stainless-api/prism-cli to @stdy/cli in scripts/mock and scripts/test, including the updated HTTP polling health check, was reviewed without surfacing any reliability or correctness concerns.
  • Gmail Actions API additions and new search parameters expand the SDK surface area without triggering any flagged issues around input validation, error handling, or type safety across the reviewed resource files.
Files requiring special attention
  • src/hyperspell/_utils/_path.py
  • scripts/mock
  • scripts/test

@entelligence-ai-pr-reviews
Copy link
Copy Markdown


Confidence Score: 5/5 - Safe to Merge

Safe to merge — this release PR for hyperspell v0.37.0 introduces well-scoped additive changes including the gmail_actions literal type across model and resource files, the effort integer parameter in MemorySearchParams and memories.search(), and URL path safety improvements, all of which follow established patterns in the codebase. No review comments were generated and heuristic analysis found zero critical, significant, or medium issues across 30 of 36 changed files reviewed. The changes appear to be a clean SDK release update with no logic bugs, missing validation, or security concerns identified.

Key Findings:

  • The gmail_actions literal type addition across 15+ model and resource files follows a consistent pattern of extending integration support, with no runtime risk since literal type expansions are backward-compatible in Python typed APIs.
  • The new effort integer parameter in MemorySearchParams is an additive optional parameter, meaning existing callers are unaffected and no breaking changes are introduced.
  • Zero heuristic issues were flagged at any severity level (critical, significant, medium, or low), and no review comments were generated, indicating the implementation is clean and consistent with existing conventions.
  • The mock server migration mentioned in the summary is an internal tooling change that does not affect the public API surface or runtime behavior of the library.
Files requiring special attention
  • hyperspell/types/memory_search_params.py
  • hyperspell/resources/memories.py

@stainless-app stainless-app bot force-pushed the release-please--branches--main--changes--next branch from 91740f5 to c057e5a Compare April 2, 2026 21:20
@entelligence-ai-pr-reviews
Copy link
Copy Markdown


Confidence Score: 5/5 - Safe to Merge

Safe to merge — this release PR (v0.37.0) introduces well-scoped additive changes including the gmail_actions literal across resource models, the effort parameter in MemorySearchParams and memories.search (sync/async), and mood as a valid extract option in SessionAddParams, all of which appear to be straightforward API surface expansions consistent with the SDK's existing patterns. No review comments were generated across the 30 reviewed files, and the heuristic analysis surfaced zero critical, significant, or medium issues. The changes are maintenance and feature-addition in nature (CI, versioning, tooling, mock server migration), with no logic mutations or security-sensitive code paths identified.

Key Findings:

  • The effort integer parameter addition to MemorySearchParams and the memories.search method follows the established pattern for optional query parameters in this SDK, with no missing validation concerns flagged.
  • The gmail_actions literal propagation across integration/source/provider types is a safe enum-style addition that does not alter existing behavior for consumers not using this new value.
  • No review comments, no unresolved pre-existing concerns, and full heuristic clearance (0 critical, 0 significant, 0 medium issues) across 30/36 reviewed files support a clean merge.

@stainless-app stainless-app bot force-pushed the release-please--branches--main--changes--next branch from c057e5a to 35ad819 Compare April 3, 2026 21:30
Comment on lines 591 to 601
"/memories/upload",
body=maybe_transform(body, memory_upload_params.MemoryUploadParams),
files=files,
body=maybe_transform(
{
"file": file,
"collection": collection,
"metadata": metadata,
},
memory_upload_params.MemoryUploadParams,
),
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Correctness: Removing extract_files/deepcopy_minimal and the files=files kwarg from _post means the file field is now sent as a plain JSON body field instead of being extracted and passed as a multipart form-data file part — actual file uploads will be broken or malformed.

🤖 AI Agent Prompt for Cursor/Windsurf

📋 Copy this prompt to your AI coding assistant (Cursor, Windsurf, etc.) to get help fixing this issue

In `src/hyperspell/resources/memories.py`, the `upload` method (sync, around line 591) previously called `extract_files` to pull the file object out of the body dict and passed it via `files=files` to `self._post()`. This diff removes that extraction and the `files=` kwarg entirely. Without this, the `file` value stays in the JSON body and is never handed to httpx as a multipart file part, breaking file uploads. Either restore the `extract_files`/`deepcopy_minimal` + `files=files` pattern, or verify that `src/hyperspell/_files.py` (also changed in this PR) now handles file extraction transparently inside `_post`/`_build_request` so this explicit extraction is no longer needed — and confirm the async version is consistent.


async def upload(
self,
*,
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Correctness: Changing file from FileTypes to str for a multipart/form-data upload means only a plain string (e.g. a filename) gets sent instead of actual file bytes/content — the server will receive the string literal, not the file data, silently corrupting all file uploads.

Affected Locations:

  • src/hyperspell/resources/memories.py:1116-1116
  • src/hyperspell/resources/memories.py:551-551
🤖 AI Agent Prompt for Cursor/Windsurf

📋 Copy this prompt to your AI coding assistant (Cursor, Windsurf, etc.) to get help fixing this issue

In `src/hyperspell/resources/memories.py`, the `async def upload()` method at line 1116 changed the `file` parameter type from `FileTypes` to `str`. For a `multipart/form-data` upload, passing a plain `str` sends only the string value (e.g. a filename) rather than the actual file contents. Revert this parameter type back to `FileTypes` (or an appropriate union type such as `Union[str, bytes, BinaryIO, FileTypes]`) so the HTTP client can correctly encode and transmit file data in the multipart body.

Comment on lines 1155 to 1167
return await self._post(
"/memories/upload",
body=await async_maybe_transform(body, memory_upload_params.MemoryUploadParams),
files=files,
body=await async_maybe_transform(
{
"file": file,
"collection": collection,
"metadata": metadata,
},
memory_upload_params.MemoryUploadParams,
),
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Correctness: Removing extract_files and files=files means the file field is no longer extracted and sent as a proper multipart file part — it will be serialized into the JSON body instead, breaking actual file uploads for the async path.

Affected Locations:

  • src/hyperspell/resources/memories.py:1155-1167
  • src/hyperspell/resources/memories.py:591-601
🤖 AI Agent Prompt for Cursor/Windsurf

📋 Copy this prompt to your AI coding assistant (Cursor, Windsurf, etc.) to get help fixing this issue

In `src/hyperspell/resources/memories.py`, the async `upload` method inside `AsyncMemoriesResource` (around line 1155-1167) was changed to remove the `extract_files` call and the `files=files` parameter passed to `self._post()`. Without extracting the file from the body and passing it via `files=`, the file content will be serialized as JSON rather than as a proper multipart form-data file part, breaking file uploads. Restore the `deepcopy_minimal` + `extract_files` + `files=files` pattern, OR verify that the underlying `_post` / multipart handling in `_files.py` (also changed in this PR) correctly handles the file field when passed through `body` without explicit `files=` — and add a test confirming real file bytes are sent correctly.

@entelligence-ai-pr-reviews
Copy link
Copy Markdown


Confidence Score: 1/5 - Blocking Issues

Not safe to merge — this PR introduces multiple critical regressions in file upload handling within src/hyperspell/resources/memories.py and src/hyperspell/types/memory_upload_params.py that will silently corrupt or break all file uploads. Specifically, the removal of extract_files/deepcopy_minimal and the files=files kwarg from the _post call means file content is serialized into the JSON body instead of being sent as a proper multipart form-data part, and changing the file parameter type from FileTypes to plain str is a breaking API change that prevents callers from passing bytes, Path, or file-like objects. While the PR delivers meaningful improvements — Gmail Actions integration, RFC 3986-compliant path encoding via path_template, and the Prism→Steady mock server migration — the file upload breakage is severe enough that shipping this would cause data corruption and silent failures in production for any user invoking the memory upload endpoint.

Key Findings:

  • In memories.py (sync path), removing extract_files/deepcopy_minimal and the files=files kwarg from _post means the file field is serialized into the JSON body instead of being extracted as a multipart file part — actual file bytes will never reach the server, silently corrupting all file uploads.
  • The same extract_files/files=files removal in the async path (memories.py around line 1155) duplicates the breakage for async callers, meaning both sync and async file upload code paths are broken.
  • Changing file in memory_upload_params.py from FileTypes (a union of str, bytes, file-like objects, Path, tuples) to plain str is a breaking public API change — existing callers passing binary content or Path objects will receive type errors and runtime failures without any deprecation notice.
  • The RFC 3986 path_template utility and Gmail Actions type additions appear well-structured and low-risk, but they cannot offset the critical regressions in the file upload subsystem.
Files requiring special attention
  • src/hyperspell/resources/memories.py
  • src/hyperspell/types/memory_upload_params.py

@stainless-app stainless-app bot force-pushed the release-please--branches--main--changes--next branch from 35ad819 to 200c87e Compare April 8, 2026 03:30
@entelligence-ai-pr-reviews
Copy link
Copy Markdown


Confidence Score: 5/5 - Safe to Merge

Safe to merge — this release PR for hyperspell v0.37.0 introduces well-scoped additions including the gmail_actions literal type propagated consistently across 15+ models and resource methods, the new effort integer field in MemorySearchParams and memories.search, and mood extraction support. The automated review found no issues across the 30 reviewed files, with zero critical, significant, or medium-severity concerns identified. The changes appear to follow established SDK patterns and the review coverage is strong at 30/36 changed files.

Key Findings:

  • The gmail_actions literal type addition appears consistently propagated across all relevant type models and resource methods (actions, memories, connections, integrations, sessions), reducing the risk of partial integration bugs at runtime.
  • The effort parameter in MemorySearchParams and memories.search is a new optional integer field with documented semantics (0 = verbatim, 1 = LLM-rewritten), which is a low-risk additive change that maintains backward compatibility.
  • No review comments were generated and zero issues of any severity (critical, significant, or medium) were flagged by heuristic analysis, indicating clean implementation across reviewed files.
  • Coverage of 30/36 changed files is reasonably high for a release PR of this scope, and the 6 unreviewed files are likely boilerplate (changelogs, version bumps, lock files) typical of SDK release PRs.
Files requiring special attention
  • src/hyperspell/resources/memories.py
  • src/hyperspell/types/memory_search_params.py
  • src/hyperspell/resources/connections.py

@stainless-app stainless-app bot force-pushed the release-please--branches--main--changes--next branch from 200c87e to 1184824 Compare April 8, 2026 05:14
@entelligence-ai-pr-reviews
Copy link
Copy Markdown


Confidence Score: 5/5 - Safe to Merge

Safe to merge — this release PR introduces Gmail Actions integration and a new path_template utility with no identified issues across the reviewed files. The _path.py utility follows RFC 3986 standards for URI template resolution with proper percent-encoding and dot-segment handling, and the gmail_actions literal type additions are consistently applied across all relevant resource methods and type models. No review comments were generated and no pre-existing unresolved concerns are present in this PR.

Key Findings:

  • The gmail_actions literal type was systematically added across 11+ type models and all relevant resource methods (actions, memories, connections, sessions), indicating a consistent and thorough integration without partial or missing coverage.
  • The new src/hyperspell/_utils/_path.py path template utility is described as RFC 3986-compliant with proper handling of percent-encoding per URI component and dot-segment traversal, which are known edge cases — the implementation appears well-scoped.
  • Zero review comments were generated across 32 of 38 changed files reviewed, and no critical, significant, or medium-severity issues were flagged by automated heuristic analysis.
Files requiring special attention
  • src/hyperspell/_utils/_path.py
  • src/hyperspell/types/__init__.py

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants