Skip to content

feat(tools): 7-tool parity and description refresh - #1432

Open
Dhravya wants to merge 2 commits into
chore/ci-python-sdk-testsfrom
feat/tools-seven-tool-parity
Open

feat(tools): 7-tool parity and description refresh#1432
Dhravya wants to merge 2 commits into
chore/ci-python-sdk-testsfrom
feat/tools-seven-tool-parity

Conversation

@Dhravya

@Dhravya Dhravya commented Aug 8, 2026

Copy link
Copy Markdown
Member

Summary

  • Refresh canonical tool descriptions in tools-shared.ts
  • Align OpenAI and AI SDK tool bindings with 7-tool surface
  • Export TOOL_DESCRIPTIONS / PARAMETER_DESCRIPTIONS from package index

Stacked on #1431

Test plan

  • bun run test:unit in packages/tools

Made with Cursor

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>
@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Aug 8, 2026

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Updated (UTC)
❌ Deployment failed
View logs
supermemory-mcp d5937b8 Aug 08 2026, 02:48 AM

@claude

claude Bot commented Aug 8, 2026

Copy link
Copy Markdown

Code Review in Progress

  • Fetch PR diff and existing review comments
  • Analyze changes for bugs, security issues, and logic errors
  • Check surrounding code for boundary issues
  • Submit review findings

View job run

@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Aug 8, 2026

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Updated (UTC)
❌ Deployment failed
View logs
supermemory-app d5937b8 Aug 08 2026, 02:47 AM

Comment on lines +165 to +180
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`)
},
)

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

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
Suggested change
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

Fix in Graphite


Is this helpful? React 👍 or 👎 to let us know.

Dhravya commented Aug 8, 2026

Copy link
Copy Markdown
Member Author

Warning

This pull request is not mergeable via GitHub because a downstack PR is open. Once all requirements are satisfied, merge this PR as a stack on Graphite.
Learn more


How to use the Graphite Merge Queue

Add 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.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@socket-security

Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Addednpm/​supermemory@​4.25.46610010095100

View full report

Comment on lines 56 to 65
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",
})

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

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)

Fix in Graphite


Is this helpful? React 👍 or 👎 to let us know.

Comment on lines +607 to +617
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,
},

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

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)

Fix in Graphite


Is this helpful? React 👍 or 👎 to let us know.

Comment on lines 27 to +47
@@ -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)",

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

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)

Fix in Graphite


Is this helpful? React 👍 or 👎 to let us know.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant