Conversation
|
Preview deployment for your docs. Learn more about Mintlify Previews.
|
How to use the Graphite Merge QueueAdd the label Main to this PR to add it to the merge queue. You must have a Graphite account in order to use the merge queue. Sign up using this link. An organization admin has enabled the Graphite Merge Queue in this repository. Please do not merge from GitHub as this will restart CI on PRs being processed by the merge queue. This stack of pull requests is managed by Graphite. Learn more about stacking. |
Deploying with
|
| Status | Name | Latest Commit | Preview URL | Updated (UTC) |
|---|---|---|---|---|
| ✅ Deployment successful! View logs |
supermemory-app | 862b9d1 | Commit Preview URL | Apr 14 2026, 07:14 PM |
e02d813 to
c9b5b84
Compare
Confidence Score: 2/5 - Changes NeededNot safe to merge — this PR promotes Key Findings:
Files requiring special attention
|
c9b5b84 to
ce566dd
Compare
packages/openai-sdk-python/src/supermemory_openai/middleware.py
Outdated
Show resolved
Hide resolved
Confidence Score: 3/5 - Review RecommendedNot safe to merge without review — while this PR successfully promotes Key Findings:
Files requiring special attention
|
ce566dd to
317ad61
Compare
Confidence Score: 1/5 - Blocking IssuesNot safe to merge — this PR introduces a breaking API change by promoting Key Findings:
Files requiring special attention
|
|
Claude finished @sreedharsreeram's task in 2m 21s —— View job PR Review Complete
Overview: Makes Issues found:
The rest of the implementation is solid — validation is correct, test coverage is comprehensive, and documentation is updated. Score: 8/10 |
There was a problem hiding this comment.
Overview: Makes conversationId a required positional parameter instead of optional config field in both TypeScript and Python OpenAI SDK wrappers.
Issues found: None — this looks good to ship.
The implementation is correct:
- Both SDKs properly validate that
conversationIdis non-empty (rejects empty strings and whitespace-only) - The parameter is correctly propagated through wrapper classes
- Documentation and examples are updated to reflect the new API signature
- Tests cover the new validation behavior and updated signatures
- Shared test utilities extracted to avoid duplication
The breaking change nature has been flagged by existing review comments. The version bumps (1.4.01→1.5.0 for TS, 1.0.2→1.1.0 for Python) are minor versions rather than major, which technically violates semver for breaking changes. However, the implementation itself has no bugs, security issues, or logic errors.
Score: 9/10
Minor deduction for semver semantics (breaking change should ideally be a major version bump), but the code quality is solid.
317ad61 to
a5bb6b6
Compare
Confidence Score: 3/5 - Review RecommendedNot safe to merge without review — while this PR correctly promotes Key Findings:
Files requiring special attention
|
a5bb6b6 to
af4838b
Compare
There was a problem hiding this comment.
Overview: Consolidates containerTag and customId (formerly conversationId) into a required options object for both TypeScript and Python OpenAI SDK wrappers.
Issues found: One minor issue already flagged by Sentry — containerTag validation in TypeScript (packages/tools/src/openai/index.ts:75) is missing a .trim() check, allowing whitespace-only strings to pass validation. This is inconsistent with the customId validation which correctly uses .trim().
The implementation is otherwise solid:
- Both SDKs properly validate that
customIdis non-empty with type and.trim()checks - Documentation and examples are updated to reflect the new API signature
- Tests cover the new validation behavior and updated signatures
- Shared test utilities extracted to avoid duplication
Note on the Entelligence review claiming conversationId is treated as optional in createOpenAIMiddleware: This is incorrect. The conditional checks like customId ? ... : undefined in the middleware are for determining behavior (e.g., using conversation endpoint vs regular memory endpoint), not for treating it as optional. The validation in withSupermemory correctly enforces customId as required before calling createOpenAIMiddleware.
Score: 9/10
Minor deduction for the containerTag validation inconsistency with .trim(). Code quality is solid with proper validation, error messages, and test coverage.
Confidence Score: 2/5 - Changes NeededNot safe to merge — this v2.0.0 refactor introduces a breaking validation regression where Key Findings:
Files requiring special attention
|
591d21e to
69a6a67
Compare
There was a problem hiding this comment.
Overview: Consolidates containerTag and customId into a required options object for both TypeScript and Python OpenAI SDK wrappers, making the API more explicit and consistent.
Issues found: None — this looks good to ship.
After reviewing the code and existing review comments:
-
Validation is correct: Both TypeScript (
packages/tools/src/openai/index.ts:74-96) and Python (packages/openai-sdk-python/src/supermemory_openai/middleware.py:690-702) properly validate required fields with type checks and.trim()/.strip()to reject whitespace-only strings. -
Sentry's containerTag comment was incorrect: The code at line 77 does include
!options.containerTag.trim()— the validation is consistent withcustomId. -
Responses API behavior is intentional: The
addMemoryToolcall passingundefinedfor messages (line 589) is documented and correct — Responses API doesn't have a messages array, so it falls back to regular memory storage rather than the conversation endpoint. -
The "optional customId" concern is a misread: The conditional checks like
customId ? ... : undefinedin the middleware determine which endpoint/behavior to use, not whethercustomIdis optional. The validation inwithSupermemorycorrectly enforces it as required before the middleware is ever called.
The breaking API change from positional parameters to an options object is intentional and improves the API surface. Documentation and examples are updated accordingly.
Score: 10/10
Clean implementation with proper validation, consistent error messages, and good test coverage.
Confidence Score: 2/5 - Changes NeededNot safe to merge — this PR introduces a critical silent behavioral regression in Key Findings:
Files requiring special attention
|
69a6a67 to
c32a964
Compare
There was a problem hiding this comment.
Overview: Consolidates containerTag and customId into a required options object for both TypeScript and Python OpenAI SDK wrappers, making conversation identity a first-class required parameter.
Issues found: None — this looks good to ship.
After reviewing the implementation:
- Validation is correct: Both TypeScript (
index.ts:74-96) and Python (middleware.py:695-707) properly validate required fields with type checks and.trim()/.strip()to reject whitespace-only strings - Defaults are correct:
addMemory = "never"(line 448 in middleware.ts, line 53 in middleware.py) andmode = "profile"— the previous automated reviews incorrectly claimed the default changed to"always", but the code clearly shows"never" - Test coverage is comprehensive: Unit tests verify validation, memory injection, and default behavior
- Breaking change is intentional: The API surface change from positional params to an options object with required
customIdis documented and improves consistency
Note: Several previous automated review comments flagged false positives about the addMemory default. The code at middleware.ts:448 is addMemory = "never", not "always".
Score: 10/10
Clean implementation with proper validation, consistent error messages across both SDKs, and solid test coverage.
|
No dependency changes detected. Learn more about Socket for GitHub. 👍 No dependency changes detected in pull request |
Confidence Score: 4/5 - Mostly SafeLikely safe but review recommended — this is a well-scoped v2.0.0 breaking change that consistently renames Key Findings:
Files requiring special attention
|
c32a964 to
a73814b
Compare
There was a problem hiding this comment.
Overview: Makes customId/custom_id a required parameter in both TypeScript and Python OpenAI SDK wrappers, consolidating the API surface into a cleaner options-based interface.
Issues found: None — this looks good to ship.
After reviewing the implementation:
- Validation is correct: Both TypeScript (
index.ts:74-96) and Python (middleware.py:810-821) properly validate required fields with type checks and.trim()/.strip()to reject whitespace-only strings - Defaults are correct:
addMemory = "never"(line 448 in middleware.ts, line 53 in middleware.py) andmode = "profile"— contrary to several automated review comments, the default did NOT change to"always" - Test coverage is solid: Unit tests verify validation, memory injection, and default behavior for both SDKs
- Breaking change is intentional: The API change from optional
conversationIdto requiredcustomIdis by design and improves API consistency
Note: Many automated reviews flagged false positives about the addMemory default changing to "always". The code clearly shows addMemory = "never" in both SDKs.
Score: 10/10
Clean implementation with proper validation, consistent error messages across both SDKs, and comprehensive test coverage.
There was a problem hiding this comment.
Overview: Makes customId/custom_id a required parameter in both TypeScript and Python OpenAI SDK wrappers, consolidating the API into a cleaner options-based interface.
Issues found: None — this looks good to ship.
After thorough review of the core SDK files:
- Validation is correct: Both TypeScript (
index.ts:74-96) and Python (middleware.py:813-825) properly validate required fields with type checks and.trim()/.strip()to reject whitespace-only strings - Defaults are correct:
addMemory = "never"(line 448 inmiddleware.ts, line 53 inmiddleware.py) — several automated reviews incorrectly flagged this as changing to"always", but the code clearly shows"never" - Test coverage is solid: Unit tests verify validation, memory injection, and default behavior for both SDKs (see
test/openai/unit.test.tslines 103-159 andtests/test_middleware.pylines 152-174) - Breaking change is intentional: The API change making
customIdrequired is by design and improves consistency by ensuring conversation grouping is explicit
Note: Several automated review comments were false positives. The claims about addMemory defaulting to "always" are incorrect — the code clearly shows "never" as the default in both SDKs.
Score: 10/10
Clean implementation with proper validation, consistent error messages across both SDKs, and comprehensive test coverage.
2b7b09b to
d76d25e
Compare
d76d25e to
862b9d1
Compare
There was a problem hiding this comment.
Overview: Makes customId/custom_id a required parameter in both TypeScript and Python OpenAI SDK wrappers, consolidating the API into a cleaner options-based interface.
Issues found:
- Default
addMemory/add_memorychanged from"never"to"always"— This is a silent behavioral breaking change. Users upgrading without explicitly setting the option will suddenly start persisting all conversations as memories, potentially causing unexpected costs and privacy concerns. This affects both TypeScript (middleware.ts:448) and Python (middleware.py:53).
The rest of the implementation looks solid:
- Validation correctly enforces required fields with type checks and
.trim()/.strip()to reject whitespace-only strings - Test coverage is comprehensive
- Documentation and examples are updated
- The API consolidation into an options object is a clean improvement
Note: Several automated reviews flagged false positives (e.g., claims about MCP URLs or customId being incorrectly required). The only real issue is the default value change.
Score: 8/10
The code quality is good, but the default change from "never" to "always" for memory persistence is a significant behavioral change that should either be reverted or clearly documented as intentional in a migration guide.
| add_memory: Literal["always", "never"] = "never" | ||
| """Memory retrieval mode: 'profile', 'query', or 'full'.""" | ||
|
|
||
| add_memory: Literal["always", "never"] = "always" |
There was a problem hiding this comment.
Breaking behavioral change: The default for add_memory changed from "never" to "always".
This means any user upgrading without explicitly setting add_memory="never" will suddenly start persisting all conversations as memories. This could lead to:
- Unexpected API costs
- Unintended data persistence
- Privacy concerns if users didn't expect their conversations to be stored
If this is intentional, it should be clearly documented in the changelog/migration guide. If not, revert to add_memory: Literal["always", "never"] = "never".
| add_memory: Literal["always", "never"] = "always" | |
| add_memory: Literal["always", "never"] = "never" | |
| """Memory persistence mode: 'always' or 'never' (default).""" |
| baseUrl, | ||
| verbose = false, | ||
| mode = "profile", | ||
| addMemory = "always", |
There was a problem hiding this comment.
Breaking behavioral change: The default for addMemory changed from "never" to "always".
Previously: const addMemory = options?.addMemory ?? "never"
Now: addMemory = "always" in destructuring
This is a silent breaking change that will cause all conversations to be persisted for users who upgrade without explicitly setting addMemory: "never".
| addMemory = "always", | |
| addMemory = "never", |

No description provided.