feat(tools): 7-tool parity and description refresh - #1432
Conversation
Update shared tool descriptions (proactive search, documentAdd guidance), export TOOL_DESCRIPTIONS from package index, and align OpenAI/AI SDK tool schemas with memoryForget and document operations. Co-authored-by: Cursor <cursoragent@cursor.com>
Deploying with
|
| Status | Name | Latest Commit | Updated (UTC) |
|---|---|---|---|
| ✅ Deployment successful! View logs |
supermemory-mcp | 7153801 | Aug 22 2026, 06:47 AM |
|
Claude finished @ved015's task in 1m 57s —— View job Code Review Complete
Summary: Reviewed the 7-tool parity and SDK v3→v4 migration changes. The implementation is solid with improved container-tag scoping for document deletions. One issue to address: restore the missing test assertion Score: 9/10 |
Deploying with
|
| Status | Name | Latest Commit | Preview URL | Updated (UTC) |
|---|---|---|---|---|
| ✅ Deployment successful! View logs |
supermemory-app | 7153801 | Commit Preview URL Branch Preview URL |
Aug 22 2026, 06:49 AM |
| it.each(["$&", "$'", "$`", "$$"])( | ||
| "stores %s literally instead of expanding it as a replacement pattern", | ||
| async (dollarSequence) => { | ||
| const result = await tool.handleCommand({ | ||
| command: "str_replace", | ||
| path: FILE_PATH, | ||
| old_str: "line3", | ||
| new_str: `price is ${dollarSequence} today`, | ||
| }) | ||
|
|
||
| expect(result.success).toBe(true) | ||
| expect(addMock).toHaveBeenCalledTimes(1) | ||
| const stored = addMock.mock.calls[0]?.[0]?.content as string | ||
| expect(stored).toContain(`price is ${dollarSequence} today`) | ||
| }, | ||
| ) |
There was a problem hiding this comment.
Test regression: the assertion expect(stored).not.toContain("line3") was removed during reformatting. The test now only verifies the new string was added but doesn't verify the old string was actually replaced. This weakens test coverage and won't catch if str_replace fails to remove the old content.
expect(stored).toContain(`price is ${dollarSequence} today`)
expect(stored).not.toContain("line3") // Add this back| it.each(["$&", "$'", "$`", "$$"])( | |
| "stores %s literally instead of expanding it as a replacement pattern", | |
| async (dollarSequence) => { | |
| const result = await tool.handleCommand({ | |
| command: "str_replace", | |
| path: FILE_PATH, | |
| old_str: "line3", | |
| new_str: `price is ${dollarSequence} today`, | |
| }) | |
| expect(result.success).toBe(true) | |
| expect(addMock).toHaveBeenCalledTimes(1) | |
| const stored = addMock.mock.calls[0]?.[0]?.content as string | |
| expect(stored).toContain(`price is ${dollarSequence} today`) | |
| }, | |
| ) | |
| it.each(["$&", "$'", "$`", "$$"])( | |
| "stores %s literally instead of expanding it as a replacement pattern", | |
| async (dollarSequence) => { | |
| const result = await tool.handleCommand({ | |
| command: "str_replace", | |
| path: FILE_PATH, | |
| old_str: "line3", | |
| new_str: `price is ${dollarSequence} today`, | |
| }) | |
| expect(result.success).toBe(true) | |
| expect(addMock).toHaveBeenCalledTimes(1) | |
| const stored = addMock.mock.calls[0]?.[0]?.content as string | |
| expect(stored).toContain(`price is ${dollarSequence} today`) | |
| expect(stored).not.toContain("line3") // Add this back | |
| }, | |
| ) | |
Spotted by Graphite
Is this helpful? React 👍 or 👎 to let us know.
222bda0 to
d5937b8
Compare
34d7599 to
d5937b8
Compare
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
Review the following changes in direct dependencies. Learn more about Socket for GitHub.
|
There was a problem hiding this comment.
Overview: This PR upgrades the supermemory SDK from v3 to v4, aligns 7 tool bindings with the new API surface, and refreshes tool descriptions for clarity.
Issues found: The missing test assertion (expect(stored).not.toContain("line3")) was already flagged by Graphite — this is a real test coverage regression that should be restored. The other Graphite comments (unused includeFullDocs, implicit any type, Biome formatting) are linter/style issues.
The core implementation changes are solid:
- The
deleteDocumentByIdentifierlogic properly resolves IDs within scoped container tags before deletion, preventing cross-scope data access - The container tag validation correctly rejects empty strings
- The
getFileDocumentrefactor to use document listing + GET instead of search is more reliable for exact-match file operations - Error handling for ambiguous document identifiers is appropriate
Score: 9/10 — Clean logic, improved scoping safety. Restore the dropped test assertion before merging.
- Replace `as any` with typed assertion in claude-memory.ts - Apply Biome formatting fixes Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

Summary
tools-shared.tsTOOL_DESCRIPTIONS/PARAMETER_DESCRIPTIONSfrom package indexStacked on #1431
Test plan
bun run test:unitinpackages/toolsMade with Cursor