Commit graph

83 commits

Author SHA1 Message Date
RIKIN SHAH , CSM
b3dcdeee4d
Merge 00b3ba886f into cfa6c7cb17 2026-09-26 20:20:52 +00:00
Dhravya Shah
958ae8b619
fix(deps): bump next to 16.3.3 in chatapp, sdk-playground, and memory-graph-playground (#1655)
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-09-09 23:01:32 -07:00
Dhravya
d0f53b0d64
feat(tools): SDK-level cross-source memory deduplication (#1531)
## Stack Context

This stack moves memory deduplication **out of the playground UI and into the SDKs themselves**, so every integration injects a single, deduplicated, self-replacing memory block. Three PRs:

1. **`sdk-dedup/tools-ts`** (this PR) — TypeScript SDK core + integrations
2. `sdk-dedup/python` — Python SDKs
3. `sdk-dedup/playground` — playground debug view reflects the SDK-owned block

## What?

Move profile deduplication into the SDK middleware for the TypeScript tools package.

- Facts are normalized (strip leading `[YYYY-MM-DD]`, trim, collapse whitespace, casefold) and deduplicated in **`static > dynamic > search`** priority within a single request.
- The result is injected as one **owned `<supermemory>` block** that *replaces* the previous block instead of accumulating a new one each turn.
- Dedup is **mode-aware**: in query mode, search results are not dropped against a profile that isn't being injected.
- Deduplication is **request-local** — no global/browser `Set`. Safe for multiple users, concurrent requests, and Cloudflare Worker isolates.

Covers AI SDK, OpenAI (Chat + Responses), Mastra, and VoltAgent. New `shared/memory-context.ts` owns the block-replacement logic.

## Why?

The earlier "conversation-scoped deduplication" was only a playground browser `Set` — a UI debug affordance that did not change what the SDK sent to the model, and would have been unsafe as server-side global state. Real cross-source dedup belongs in the SDK, applied fresh per stateless model request.

## Testing

- `bun run test` in `packages/tools`: 145 passed (the one failing suite, `claude-memory.test.ts`, is a pre-existing broken import unrelated to this change).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Medium Risk**
> Changes how system prompts and instructions are built across all TypeScript integrations; behavior is well-covered by unit tests but incorrect strip/replace logic could drop or duplicate context in production prompts.
>
> **Overview**
> Moves **cross-source memory deduplication** and **owned prompt injection** into `@supermemory/tools` so every integration sends one deduplicated memory block per request instead of growing context each turn.
>
> **Deduplication:** Facts are normalized via `normalizeMemoryFact` (strip `[YYYY-MM-DD]`, trim, collapse whitespace, lowercase) and deduplicated with **static → dynamic → search** priority. `deduplicateMemoriesForMode` keeps search hits in **query** mode when the profile is not injected.
>
> **Owned `<supermemory>` block:** New `shared/memory-context.ts` wraps memories in `<supermemory context="user-memories" readonly>`, strips stale blocks, and **replaces** prior SDK context while preserving caller system instructions. Applied in AI SDK (`injectMemoriesIntoParams`), OpenAI Chat/Responses middleware, Mastra input processor (`wrapMemoryContext`), and VoltAgent hooks.
>
> **Tests:** Unit coverage for block replacement (with-supermemory, OpenAI, VoltAgent), Mastra wrapper tag assertion, normalized dedup variants, and concurrent `containerTag` isolation.
>
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit 2fa2e0d85c. Bugbot is set up for automated code reviews on this repo. Configure [here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
2026-09-01 06:10:36 +00:00
Dhravya
de3bbb3ce9
feat(tools): 7-tool parity and description refresh (#1432)
## 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](https://cursor.com)
2026-09-01 05:59:57 +00:00
Rikinshah787
00b3ba886f fix(tools): handle the memory tool commands Claude actually sends
Three places where ClaudeMemoryTool diverges from the documented
memory_20250818 wire format:

- rename sends old_path/new_path, not path. handleCommand validated
  command.path, so every rename coming from a real model died with
  "Cannot read properties of undefined (reading 'startsWith')".
  path is still accepted as the source for existing callers.
- insert_line means "insert after this line" (0 = top of file), but we
  spliced at insertLine - 1 and rejected 0, so every insert landed one
  line above where Claude asked and inserting at the top was impossible.
- str_replace with new_str omitted is a deletion per the spec; we
  rejected it.

The new tests mock the supermemory client so they run without an API
key. Also fixed the rename example in the docs, which showed the same
path shape the code expected.
2026-08-25 16:07:14 -07:00
MaheshtheDev
e4afc770be feat(tools): apiKey option, type re-exports, and two reliability fixes (#1594)
Some checks failed
Publish Tools / publish (push) Has been cancelled
Cherry-picks four contributor PRs for `@supermemory/tools` onto one branch, and bumps the package to 2.2.0.

- #1244 (@rajarshidattapy): `withSupermemory` accepts `options.apiKey` instead of only reading `SUPERMEMORY_API_KEY`, matching the Vercel, Mastra and Voltagent integrations. Unblocks secrets managers, edge runtimes and per-request keys.
- #1574 (@Agnik47): re-exports `PromptTemplate`, `MemoryPromptData` and `WithSupermemoryOptions` from `ai-sdk`. `./vercel` is not a published subpath, so the documented custom-template example did not compile.
- #1488 (@abhinav7x94): malformed tool-call JSON returns an error result instead of throwing out of the request.
- #1507 (@abhinav7x94): VoltAgent `onEnd` awaits the conversation save, which was fire-and-forget and could be dropped when a serverless runtime tore down.

Dropped the `middleware.test.ts` added by #1244. Note that editing `packages/tools/package.json` triggers the npm publish workflow on merge.

Co-Authored-By: rajarshidattapy <138959719+rajarshidattapy@users.noreply.github.com>
Co-Authored-By: Agnik47 <140933190+Agnik47@users.noreply.github.com>
Co-Authored-By: abhinav7x94 <204053250+abhinav7x94@users.noreply.github.com>
2026-08-24 22:39:55 +00:00
Abhinav Kumar Singh
82dae50ef4
fix(tools): bound memory forget requests (#1451) 2026-08-13 19:11:00 +05:30
Rajarshi Datta
86c3ad69d1
fix(middleware): update deduplication logic for profile memories in query mode (#1243) 2026-07-21 19:25:32 +05:30
Paramveer singh
bec73e28ad
docs(tools): correct addMemory default in OpenAI middleware JSDoc (#1253) 2026-07-17 23:17:26 -07:00
Abhay Singh
86854efee6
fix(tools): make claude-memory file operations act on the exact file, literally (#1285)
Some checks failed
Publish Tools / publish (push) Has been cancelled
2026-07-17 18:24:09 +05:30
Haroon
e5e4e498f2
fix(tools): coerce limit/offset in ai-sdk schemas (#1202)
Co-authored-by: Dhravya Shah <dhravyashah@gmail.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 19:42:15 -07:00
Gautam Sharma
bc6eb73d43
fix(tools): reject conflicting container config (#1214) 2026-07-10 19:15:25 -07:00
Dhravya Shah
36b07e2a26
chore(tools): bump @supermemory/tools to 2.1.0 (#1234)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 18:55:15 -07:00
Sandipan kundu
2163f592b7
fix(tools,validation): persist tool-call turns in conversation memory & tidy search thresholds (#1211)
Co-authored-by: Dhravya Shah <dhravyashah@gmail.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 18:54:56 -07:00
Abhay Singh
501613b6bc
fix(tools): repair SDK call mismatches that broke five tools (#1186) 2026-07-10 18:30:41 -07:00
Mubashir R
9ad351feb0
fix: view_range [start, -1] drops the last line in the Claude memory tool (#1043)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-05 17:28:36 +05:30
MaheshtheDev
0d2ca1bb41 docs: @supermemory/tools v2.0.0 & migration guide (#886)
Some checks failed
Publish Tools / publish (push) Has been cancelled
- Published the v2.0.0 docs and a 1.4 → 2.0 migration guide so existing users have a clear upgrade path.
- Updated the four integration pages (AI SDK, OpenAI, Mastra, VoltAgent) to reflect v2 defaults and link to the migration guide.
- Added a short explainer on the two required fields (containerTag, customId) so new users aren't blocked at first integration.
2026-04-27 18:24:59 +00:00
sreedharsreeram
5ecc334989 Voltagent fixes (#882)
Some checks failed
Publish Tools / publish (push) Has been cancelled
2026-04-25 01:45:54 +00:00
sreedharsreeram
589edd3437 updated typescript and python sdk (#878) 2026-04-25 01:43:13 +00:00
sreedharsreeram
d7ee078ae9 mastra object structure udpates (#881) 2026-04-24 23:47:46 +00:00
sreedharsreeram
c76d27f284 custom id implementation (#877) 2026-04-24 23:43:16 +00:00
sreedharsreeram
3c02aefe44 withSupermemory config object signature (#876) 2026-04-24 23:43:16 +00:00
MaheshtheDev
23a60f90f6 tools: timeout and default option on error to skip (#875)
Some checks failed
Publish Tools / publish (push) Has been cancelled
**`withSupermemory`** **(AI SDK)**

- **`skipMemoryOnError`** **defaults to** **`true`**. memory errors/timeouts log and the model runs on the **original** prompt unless you set `skipMemoryOnError: false`.
- **Pre-LLM** **`/v4/profile`** **is aborted after 5s** via `AbortSigna`

**Docs**

- `packages/tools/README.md`, **`apps/docs/integrations/ai-sdk.md`**
2026-04-23 00:11:20 +00:00
Dhravya
5e3033d484
create lobbyside (#874)
Some checks are pending
Publish Tools / publish (push) Waiting to run
2026-04-21 20:06:51 +00:00
MaheshtheDev
dd652bc6c6 chore: package update to trigger auto publish (#873) 2026-04-21 18:05:13 +00:00
MaheshtheDev
20c5a18e13 chore: skipMemoryOnError for withSupermemory (#871) 2026-04-21 16:43:23 +00:00
vorflux[bot]
5493455f69
ci: switch npm packages to trusted publishing (OIDC) (#863)
Some checks failed
Publish Cartesia SDK Python / publish (push) Has been cancelled
Publish Tools / publish (push) Has been cancelled
Co-authored-by: Dhravya Shah <dhravyashah@gmail.com>
2026-04-16 19:41:58 -07:00
MaheshtheDev
76b0f2746b fix: Multi Params issue with @supermemory/tools (#854)
testing for now

fix proxy issue

upgraded the package
2026-04-16 07:37:09 +00:00
sreedharsreeram
0783594b8d voltagent-sdk (#791) 2026-04-14 20:22:46 +00:00
Ishaan Gupta
c7b841798f
perf: Execute Claude memory tool calls concurrently (#824) 2026-04-12 14:45:29 -07:00
Ishaan Gupta
239fc123b9
feat: Use LRUCache instead of Map in MemoryCache (#774) 2026-03-20 10:37:39 -07:00
MaheshtheDev
a00a751e10 pkg(tools): Expose raw search results in MemoryPromptData for prompt templates (#787)
Expose raw search results in `MemoryPromptData` so prompt templates can traverse, filter, and selectively include results based on metadata (e.g. score, source).

##### Usage example

```typescript
const promptTemplate = (data: MemoryPromptData) => {
  const relevant = data.searchResults.filter(
    (r) => (r.metadata?.score as number) > 0.7
  )
  return `${data.userMemories}\n${relevant.map(r => r.memory).join('\n')}`
}
```
2026-03-19 00:38:53 +00:00
Mahesh Sanikommu
962fb85cd3
feat: empty state action for new spaces (#780)
Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-03-15 11:02:14 -07:00
sreedharsreeram
6d93cd083d OpenAI SDK Backfill (#771) 2026-03-06 23:57:10 +00:00
Dhravya Shah
bdd1f36f1d one more try 2026-03-05 14:30:57 -08:00
Dhravya Shah
b1d545c4ba fix: 2026-03-05 14:24:50 -08:00
nexxeln
9553434c9a mastra integration (#717)
adds withSupermemory wrapper and input/output processors for
mastra agents:

- input processor fetches and injects memories into system prompt
before llm calls
- output processor saves conversations to supermemory after
responses
- supports profile, query, and full memory search modes
- includes custom prompt templates and requestcontext support

const agent = new Agent(withSupermemory(
{ id: "my-assistant", model: openai("gpt-4o"), instructions:
"..." },
"user-123",
{ mode: "full", addMemory: "always", threadId: "conv-456" }
))

includes docs as well

this pr also reworks how the tools package works into shared modules
2026-02-03 00:43:08 +00:00
Dhravya Shah
4ca0f593a5 fix: merge conflicts 2026-01-23 17:42:47 -07:00
Dhravya Shah
1c6b7800a8 chore: bump package versions 2026-01-22 20:50:51 -07:00
MaheshtheDev
0853bc86cb feat: tools package strict mode for openai models (#699) 2026-01-23 03:15:39 +00:00
MaheshtheDev
1423bd7004 feat: mobile responsive, lint formats, toast, render issue fix (#688)
- Mobile responsive
- new toast design
- web document render issue fix
- posthog analytics
- ui improvements
2026-01-21 03:11:53 +00:00
MaheshtheDev
32a7eff3af fix(tools): multi step agent prompt caching (#685) 2026-01-20 01:30:43 +00:00
Dhravya Shah
87b361c26b
docs changes (#678)
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-18 16:55:32 -08:00
Mahesh Sanikommu
645f89310c
PR: nova alpha release (#670)
Co-authored-by: Dhravya Shah <dhravya@supermemory.com>
2026-01-13 00:54:56 -08:00
MaheshtheDev
68d4d95c1d feat: allow prompt template for @supermemory/tools package (#655)
## Add customizable prompt templates for memory injection

**Changes:**

- Add `promptTemplate` option to `withSupermemory()` for full control over injected memory format (XML, custom branding, etc.)
- New `MemoryPromptData` interface with `userMemories` and `generalSearchMemories` fields
- Exclude `system` messages from persistence to avoid storing injected prompts
- Add JSDoc comments to all public interfaces for better DevEx

**Usage:**

```typescript
const customPrompt = (data: MemoryPromptData) => `
<user_memories>
${data.userMemories}
${data.generalSearchMemories}
</user_memories>
`.trim()

const model = withSupermemory(openai("gpt-4"), "user-123", {
  promptTemplate: customPrompt,
})
```
2026-01-07 03:48:16 +00:00
MaheshtheDev
04fb67a33e chore: update the package version of tools (#637) 2025-12-30 18:58:04 +00:00
Arnab Mondal
aa5654f084
fix(tools): pass apiKey to profile search instead of using process.env (#634) 2025-12-30 10:15:10 -08:00
Dhravya Shah
1162cbf284 conditional 2025-12-23 19:38:55 -08:00
MaheshtheDev
d095bd234e feat(@supermemory/tools): vercel ai sdk compatbile with v5 and v6 (#628) 2025-12-24 01:36:03 +00:00
Dhravya Shah
67e783158b bump package 2025-12-23 15:26:47 -08:00