Skip to content

release: 0.39.0#94

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

release: 0.39.0#94
stainless-app[bot] wants to merge 29 commits intomainfrom
release-please--branches--main--changes--next--components--hyperspell

Conversation

@stainless-app
Copy link
Copy Markdown
Contributor

@stainless-app stainless-app Bot commented Apr 22, 2026

Automated Release PR

0.39.0 (2026-05-08)

Full Changelog: v0.38.0...v0.39.0

Features

Chores

  • avoid formatting file that gets changed during releases (cf52108)
  • format: run eslint and prettier separately (43ec88d)
  • internal: codegen related update (f6cdc59)
  • internal: more robust bootstrap script (dd48b06)
  • internal: update docs ordering (9ac7b35)
  • redact api-key headers in debug logs (9ccb5ff)
  • restructure docs search code (8a752b4)
  • update SDK settings (5f5049a)

Documentation


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 Apr 22, 2026

🧪 Testing

To try out this version of the SDK:

npm install 'https://pkg.stainless.com/s/hyperspell-typescript/8958b49b8d8a5868432f1b932b1aec3b61c5d8c8/dist.tar.gz'

Expires at: Sun, 07 Jun 2026 18:32:34 GMT
Updated at: Fri, 08 May 2026 18:32:34 GMT

@canaries-inc
Copy link
Copy Markdown

canaries-inc Bot commented Apr 22, 2026

🐤 Canary Summary

This is an automated release PR with no UI/UX changes:

  • Version bumped from 0.38.0 to 0.38.1 across all package files
  • Updated npm publishing workflow authentication from OIDC to token-based
  • Modified release scripts to use NPM_TOKEN environment variable
  • Updated changelog and configuration metadata
  • No user-facing UI components, styling, or application logic affected


View PR tests on Canary

@canaries-inc
Copy link
Copy Markdown

canaries-inc Bot commented Apr 22, 2026

🐤 Canary Proposed Tests

No testable user journeys found for this PR.

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


Confidence Score: 5/5 - Safe to Merge

Safe to merge — this appears to be a standard release bump to version 0.38.1 with no identified logic, security, or correctness issues surfaced during review. The automated analysis found zero critical, significant, or medium-severity issues across the reviewed files. While only 4 of 13 changed files received coverage, the absence of any flagged concerns and the nature of a patch release (typically containing minor fixes or version metadata updates) supports a clean merge.

Key Findings:

  • No new review comments were generated, indicating no obvious logic bugs, security vulnerabilities, or correctness issues were detected in the analyzed code.
  • The PR is a patch release (0.38.1), which typically involves version string updates, changelog entries, and minor bug fixes rather than high-risk architectural changes.
  • Zero unresolved pre-existing comments were carried into this review, meaning there is no backlog of known issues being deferred.
  • 4 of 13 changed files were reviewed by the heuristic analysis — the unreviewed files represent a minor blind spot, but for a release PR this risk is generally low.

@stainless-app stainless-app Bot force-pushed the release-please--branches--main--changes--next--components--hyperspell branch from dcbda64 to 7fde307 Compare April 23, 2026 04:06
@stainless-app stainless-app Bot force-pushed the release-please--branches--main--changes--next--components--hyperspell branch from 7fde307 to 983f201 Compare April 23, 2026 04:06
@entelligence-ai-pr-reviews
Copy link
Copy Markdown

entelligence-ai-pr-reviews Bot commented Apr 23, 2026

EntelligenceAI PR Summary

Release v0.39.0 adds three new integration providers (Granola, Fathom, Linear), refactors tooling (npm auth, linting/formatting pipeline), and delivers several API schema enhancements.

  • Added 'granola', 'fathom', 'linear' literals to union types in actions.ts, auth.ts, connections.ts, integrations.ts, web-crawler.ts, memories.ts, and shared.ts
  • Refactored memories.search effort parameter from number to 'minimal' | 'low' | 'medium' | 'high' string enum; added recency_half_life_days option
  • Added optional selected_count to ConnectionListResponse, requires_channel_selection to IntegrationListResponse, and folder_ancestors to Resource
  • Added HYPERSPELL_CUSTOM_HEADERS environment variable support in src/client.ts for injecting custom HTTP headers
  • Extended sensitive header redaction in src/internal/utils/log.ts to cover api-key and x-api-key
  • Switched npm publish workflow from OIDC to token-based auth (NPM_TOKEN/HYPERSPELL_NPM_TOKEN) across CI workflows and publish scripts
  • Decoupled Prettier from ESLint: removed eslint-plugin-prettier, added standalone prettier --check in lint pipeline
  • Added @ts-ignore comment fix post-processing for TypeScript declaration files in postprocess-files.cjs
  • Fixed unbound variable risk in scripts/bootstrap using ${SKIP_BREW:-} expansion

Confidence Score: 3/5 - Review Recommended

Likely safe but review recommended — This PR successfully adds three new integration providers (Granola, Fathom, Linear) across the schema type files and refactors the memories.search effort parameter to a proper string enum, which are clean additive changes. However, two substantive issues remain unresolved: a bug in scripts/fast-format where $FILE_LIST guards the path variable rather than file contents causing prettier to potentially hang on empty changesets, and a pre-existing unresolved concern in src/client.ts where a line starting with a colon (colon index 0) produces an empty-string header key silently written into the headers map. The pre-existing client.ts issue was not introduced by this PR but remains open and unaddressed.

Key Findings:

  • In scripts/fast-format, the guard if [ -z "$FILE_LIST" ] tests whether the path variable itself is empty — which it never is after the line 22 validation — rather than whether the file at that path contains any entries. This means when zero files have changed, cat "$FILE_LIST" | xargs prettier is called with no arguments, potentially causing prettier to hang waiting on stdin or error unexpectedly.
  • A pre-existing unresolved issue in src/client.ts (L228-L245) allows empty-string header keys when a response line begins with a colon (e.g., : value), since line.substring(0, 0).trim() evaluates to ''. This is a correctness/robustness bug that silently corrupts the parsed headers map, though it predates this PR.
  • The schema additions across actions.ts, auth.ts, connections.ts, integrations.ts, web-crawler.ts, memories.ts, and shared.ts appear to be straightforward union type extensions and are low-risk, consistent with the existing pattern for provider additions.
  • The effort parameter refactor in memories.search from number to 'minimal' | 'low' | 'medium' | 'high' is a breaking API change for any consumer passing numeric values; while likely intentional for a minor version bump, downstream consumers need to be aware.
Files requiring special attention
  • scripts/fast-format
  • src/client.ts
  • src/memories.ts

@stainless-app stainless-app Bot force-pushed the release-please--branches--main--changes--next--components--hyperspell branch from 983f201 to 8dead0f Compare April 23, 2026 22:30
@stainless-app stainless-app Bot force-pushed the release-please--branches--main--changes--next--components--hyperspell branch from 8dead0f to c890ae3 Compare April 24, 2026 18:30
@stainless-app stainless-app Bot force-pushed the release-please--branches--main--changes--next--components--hyperspell branch from c890ae3 to 63c35fd Compare April 25, 2026 03:31
@stainless-app stainless-app Bot force-pushed the release-please--branches--main--changes--next--components--hyperspell branch from 63c35fd to 479c910 Compare April 25, 2026 18:31
@stainless-app stainless-app Bot force-pushed the release-please--branches--main--changes--next--components--hyperspell branch from 479c910 to f6c43d6 Compare April 25, 2026 20:31
@stainless-app stainless-app Bot force-pushed the release-please--branches--main--changes--next--components--hyperspell branch from f6c43d6 to 6f3fbdd Compare April 26, 2026 02:31
@stainless-app stainless-app Bot changed the title release: 0.38.1 release: 0.39.0 Apr 26, 2026
@stainless-app stainless-app Bot force-pushed the release-please--branches--main--changes--next--components--hyperspell branch from 6f3fbdd to 7e1e1c1 Compare April 26, 2026 02:31
@stainless-app stainless-app Bot force-pushed the release-please--branches--main--changes--next--components--hyperspell branch from 7e1e1c1 to 705d4a6 Compare April 27, 2026 00:31
@stainless-app stainless-app Bot force-pushed the release-please--branches--main--changes--next--components--hyperspell branch from d8c94c6 to 4995c0a Compare April 29, 2026 05:47
@stainless-app stainless-app Bot force-pushed the release-please--branches--main--changes--next--components--hyperspell branch from 4995c0a to 375e8a5 Compare April 29, 2026 05:55
@stainless-app stainless-app Bot force-pushed the release-please--branches--main--changes--next--components--hyperspell branch from 375e8a5 to 8d58fcd Compare April 30, 2026 08:02
@stainless-app stainless-app Bot force-pushed the release-please--branches--main--changes--next--components--hyperspell branch from 8d58fcd to e18bc55 Compare April 30, 2026 08:02
@stainless-app stainless-app Bot force-pushed the release-please--branches--main--changes--next--components--hyperspell branch from e18bc55 to f0498f8 Compare May 1, 2026 00:31
@stainless-app stainless-app Bot force-pushed the release-please--branches--main--changes--next--components--hyperspell branch from f0498f8 to 9c89038 Compare May 1, 2026 05:00
@stainless-app stainless-app Bot force-pushed the release-please--branches--main--changes--next--components--hyperspell branch from 9c89038 to c9af6e9 Compare May 5, 2026 19:31
@stainless-app stainless-app Bot force-pushed the release-please--branches--main--changes--next--components--hyperspell branch from c9af6e9 to 46188f1 Compare May 6, 2026 20:31
@stainless-app stainless-app Bot force-pushed the release-please--branches--main--changes--next--components--hyperspell branch from 46188f1 to b9777ce Compare May 7, 2026 04:23
@stainless-app stainless-app Bot force-pushed the release-please--branches--main--changes--next--components--hyperspell branch from b9777ce to 5e41d76 Compare May 7, 2026 19:31
@stainless-app stainless-app Bot force-pushed the release-please--branches--main--changes--next--components--hyperspell branch from 5e41d76 to bd4ac3c Compare May 8, 2026 03:31
@stainless-app stainless-app Bot force-pushed the release-please--branches--main--changes--next--components--hyperspell branch from bd4ac3c to 3de92dd Compare May 8, 2026 05:11
Comment thread src/client.ts
Comment on lines +236 to +237
if (colon >= 0) {
parsed[line.substring(0, colon).trim()] = line.substring(colon + 1).trim();
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Major: Empty header name allowed when line starts with colon — When colon === 0 (e.g. a line like : value), line.substring(0, 0).trim() is "", so an empty-string key is written into parsed and forwarded as a header. The guard should be colon > 0 to skip lines with no header name.

🤖 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/client.ts at line 236, change `if (colon >= 0)` to `if (colon > 0)`. The current condition allows `colon === 0`, which means a line starting with `:` produces an empty-string header name (`line.substring(0, 0).trim() === ""`). This is an invalid HTTP header name. Changing to `colon > 0` skips such lines.

@stainless-app stainless-app Bot force-pushed the release-please--branches--main--changes--next--components--hyperspell branch from 3de92dd to f8182ef Compare May 8, 2026 17:31
@stainless-app stainless-app Bot force-pushed the release-please--branches--main--changes--next--components--hyperspell branch from f8182ef to 9ea9d7d Compare May 8, 2026 18:32
Comment thread scripts/fast-format
echo "$PRETTIER_FILES" | xargs ./node_modules/.bin/prettier \
--write --cache --cache-strategy metadata --no-error-on-unmatched-pattern \
'!**/dist' '!**/*.ts' '!**/*.mts' '!**/*.cts' '!**/*.js' '!**/*.mjs' '!**/*.cjs'
if ! [ -z "$FILE_LIST" ]; then
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Major: Guard checks variable name, not file content — prettier hangs on empty file list$FILE_LIST holds a file path (e.g. /tmp/changed.txt), which is always a non-empty string after the validation at line 22, so this guard is always true. When FILE_LIST contains zero lines, cat "$FILE_LIST" | xargs prettier invokes prettier with no file arguments; GNU xargs runs the command once on empty stdin (without -r), causing prettier to block waiting on stdin. The eslint section correctly guards on the filtered content ($ESLINT_FILES), not the path variable.

🤖 AI Agent Prompt for Cursor/Windsurf

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

In `scripts/fast-format`, line 34, the guard `if ! [ -z "$FILE_LIST" ]` incorrectly checks whether the variable holding the file path is non-empty (always true) instead of whether the file has any content. Change line 34 from:

  if ! [ -z "$FILE_LIST" ]; then

to:

  if [ -s "$FILE_LIST" ]; then

This mirrors how the eslint section avoids running the tool when there are no files to process, and prevents prettier from being invoked with no file arguments (which causes it to hang reading from stdin).

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