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 failed View logs |
supermemory-mcp | d5937b8 | Aug 08 2026, 02:48 AM |
Deploying with
|
| Status | Name | Latest Commit | Updated (UTC) |
|---|---|---|---|
| ❌ Deployment failed View logs |
supermemory-app | d5937b8 | Aug 08 2026, 02:47 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
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
Review the following changes in direct dependencies. Learn more about Socket for GitHub.
|
| limit = DEFAULT_VALUES.limit, | ||
| }) => { | ||
| try { | ||
| const response = await client.search.execute({ | ||
| const response = await client.search({ | ||
| q: informationToGet, | ||
| containerTags, | ||
| ...(containerTags[0] ? { containerTag: containerTags[0] } : {}), | ||
| limit, | ||
| chunkThreshold: DEFAULT_VALUES.chunkThreshold, | ||
| includeFullDocs, | ||
| threshold: DEFAULT_VALUES.chunkThreshold, | ||
| searchMode: "hybrid", | ||
| }) |
There was a problem hiding this comment.
The includeFullDocs parameter is still being destructured from the function arguments but is no longer passed to the API call (replaced by searchMode: 'hybrid'). Remove includeFullDocs from the destructured parameters to fix the unused variable lint warning.
Spotted by Graphite (based on CI logs)
Is this helpful? React 👍 or 👎 to let us know.
| const content = match.chunk || match.memory || "" | ||
| const documentId = match.documents?.[0]?.id ?? match.id | ||
|
|
||
| return { | ||
| success: true, | ||
| document, | ||
| document: { | ||
| documentId, | ||
| content, | ||
| raw: content, | ||
| metadata: match.metadata, | ||
| }, |
There was a problem hiding this comment.
The match.metadata field likely has an implicit any type from the SDK response, triggering Biome's noExplicitAny rule. Add an explicit type annotation or cast, e.g. metadata: match.metadata as Record<string, unknown> | undefined, to satisfy the linter.
Spotted by Graphite (based on CI logs)
Is this helpful? React 👍 or 👎 to let us know.
| @@ -33,14 +34,17 @@ export const PARAMETER_DESCRIPTIONS = { | |||
| containerTag: "Tag to filter/scope the operation (e.g., user ID, project ID)", | |||
| query: "Optional search query to include relevant search results", | |||
| page: "Page number to fetch, 1-based (default: 1)", | |||
| documentId: "The unique identifier of the document to operate on", | |||
| content: "The content to add - can be text, URL, or other supported formats", | |||
| documentId: | |||
| "Document ID from documentList — permanently deletes the source document and all extracted memories. Not a profile memory ID.", | |||
| content: | |||
| "Document body to store — plain text, a conversation transcript, a long pasted blob, or a URL to a webpage/PDF/image/video. Content is queued and memories are extracted automatically after background processing; do not split into addMemory calls.", | |||
| title: "Optional title for the document", | |||
| description: "Optional description for the document", | |||
| memoryId: "The unique identifier of the memory entry", | |||
| memoryId: | |||
| "Profile memory ID from searchMemories or getProfile — soft-deletes one learned fact via memoryForget. Not a document ID.", | |||
| memoryContent: | |||
| "Exact content match of the memory entry to operate on (alternative to ID)", | |||
| reason: "Optional reason for forgetting this memory", | |||
| "Exact text of the profile memory to forget (alternative to memoryId). Must match precisely; if unsure, search first and use memoryId.", | |||
| reason: "Optional reason recorded when forgetting (e.g. outdated, user correction)", | |||
There was a problem hiding this comment.
Biome reformatted these long string literals and multi-line parameter descriptions but the changes weren't committed. Run biome check --apply locally and commit the resulting formatting diff to fix the CI formatting check failure.
Spotted by Graphite (based on CI logs)
Is this helpful? React 👍 or 👎 to let us know.


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