mirror of
https://github.com/supermemoryai/supermemory.git
synced 2026-10-28 06:24:40 +00:00
Every integration (AI SDK, OpenAI, Mastra, VoltAgent, Claude memory) now calls v5 through `supermemory@5`. The config takes one `namespace` instead of `containerTags` or `projectId`, and `withSupermemory` takes `namespace` and `id` instead of `containerTag` and `customId`. No aliases. With no config the tools still use `sm_project_default`. Conversations are stored as one document per conversation keyed by `id` instead of `/v4/conversations`. `memoryForget` drops `reason`; forgetting by text previews with `forgetMatching` and then forgets exact matches by id. Claude memory marks its files with `metadata.source` instead of a second tag. Search keeps the 2.x defaults so results do not shift. `packages/ai-sdk` is removed: npm already deprecates it in favor of `@supermemory/tools/ai-sdk`, so its CI steps and playground wiring go too. `apps/sdk-playground` moves to the new tools API and v5 routes, including its Python server. Tested against production: add, search, profile, list and delete. 112 unit tests pass; type errors drop from 148 to 141, none new. The `supermemory` dependency pins the rc until 5.0.0 is published.
71 lines
1.8 KiB
TypeScript
71 lines
1.8 KiB
TypeScript
#!/usr/bin/env bun
|
|
/**
|
|
* Simple Claude Memory Tool Example
|
|
* Shows the cleanest way to integrate Claude's memory tool with supermemory
|
|
*/
|
|
|
|
import Anthropic from "@anthropic-ai/sdk"
|
|
import { createClaudeMemoryTool } from "./claude-memory"
|
|
|
|
const anthropic = new Anthropic({
|
|
apiKey: process.env.ANTHROPIC_API_KEY!,
|
|
})
|
|
|
|
const memoryTool = createClaudeMemoryTool(process.env.SUPERMEMORY_API_KEY!, {
|
|
namespace: "my-app",
|
|
})
|
|
|
|
async function chatWithMemory(userMessage: string) {
|
|
// Send message to Claude with memory tool
|
|
const response = await anthropic.beta.messages.create({
|
|
model: "claude-sonnet-4-5",
|
|
max_tokens: 2048,
|
|
messages: [{ role: "user", content: userMessage }],
|
|
tools: [{ type: "memory_20250818", name: "memory" }],
|
|
betas: ["context-management-2025-06-27"],
|
|
})
|
|
|
|
// Handle any memory tool calls
|
|
const toolResults = []
|
|
for (const block of response.content) {
|
|
if (block.type === "tool_use" && block.name === "memory") {
|
|
const toolResult = await memoryTool.handleCommandForToolResult(
|
|
block.input as any,
|
|
block.id,
|
|
)
|
|
toolResults.push(toolResult)
|
|
}
|
|
}
|
|
|
|
// Send tool results back to Claude if needed
|
|
if (toolResults.length > 0) {
|
|
const finalResponse = await anthropic.beta.messages.create({
|
|
model: "claude-sonnet-4-5",
|
|
max_tokens: 2048,
|
|
messages: [
|
|
{ role: "user", content: userMessage },
|
|
{ role: "assistant", content: response.content },
|
|
{ role: "user", content: toolResults },
|
|
],
|
|
tools: [{ type: "memory_20250818", name: "memory" }],
|
|
betas: ["context-management-2025-06-27"],
|
|
})
|
|
|
|
return finalResponse
|
|
}
|
|
|
|
return response
|
|
}
|
|
|
|
// Example usage
|
|
async function example() {
|
|
const response = await chatWithMemory(
|
|
"Remember that I prefer React with TypeScript for my projects",
|
|
)
|
|
|
|
console.log(response.content[0])
|
|
}
|
|
|
|
if (import.meta.main) {
|
|
example()
|
|
}
|