mirror of
https://github.com/supermemoryai/supermemory.git
synced 2026-10-02 02:11:20 +00:00
`supermemoryProfileSearch` in `shared/memory-client.ts` is the only Supermemory HTTP call in this package with neither a request timeout nor redirect handling. The identical `/v4/profile` call in `openai/middleware.ts` sets both, and `/v4/conversations` (`conversations-client.ts`) and `/v4/memories` (`shared/forget-memory.ts`) each set a 30s budget. Two consequences: - **Unbounded request.** A timeout only applied when the caller supplied a signal. `withSupermemory` passes one (5s), but `buildMemoriesText` is called with no signal by the Mastra processor and the VoltAgent middleware, and by the exported `buildMemoriesText` / `addSystemPrompt` helpers. `fetch` has no default deadline, so a stalled connection blocks the agent turn indefinitely — the failure both integrations' surrounding try/catch is written to absorb, but which never surfaces as an error. - **Redirects followed.** The request carries `Authorization: Bearer <apiKey>`; a 3xx from a misconfigured or attacker-influenced `baseUrl` was followed silently rather than refused. Apply a 30s `PROFILE_REQUEST_TIMEOUT_MS` unconditionally and set `redirect: "error"`. A caller signal is composed with the timeout via `AbortSignal.any` rather than replacing it, so a caller-side budget can only shorten the request, never leave it unbounded — the wrapper is kept separate so the composition is stated once rather than re-derived at the call site. `src/shared/memory-client.test.ts` existed but was absent from the `test:unit` file list CI runs, so its assertions never ran on a pull request; add it alongside the new coverage. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L7GkmUn6skD6dCzKtcHDbe
74 lines
2.1 KiB
JSON
74 lines
2.1 KiB
JSON
{
|
|
"name": "@supermemory/tools",
|
|
"type": "module",
|
|
"version": "2.3.0",
|
|
"description": "Memory tools for AI SDK, OpenAI, Voltagent and Mastra with supermemory",
|
|
"scripts": {
|
|
"build": "tsdown",
|
|
"dev": "tsdown --watch --ignore-watch .turbo",
|
|
"check-types": "tsc --noEmit",
|
|
"test": "vitest --testTimeout 100000",
|
|
"test:unit": "vitest run --testTimeout 100000 src/tools-shared.test.ts src/tool-operations.test.ts src/claude-memory.test.ts src/shared/memory-client.test.ts test/with-supermemory/unit.test.ts test/with-supermemory/conversation-conversion.test.ts test/openai-middleware.unit.test.ts test/mastra/unit.test.ts test/voltagent.unit.test.ts",
|
|
"test:watch": "vitest --watch --testTimeout 100000"
|
|
},
|
|
"dependencies": {
|
|
"@ai-sdk/anthropic": "^2.0.25",
|
|
"@ai-sdk/openai": "^2.0.23",
|
|
"ai": "^5.0.29",
|
|
"lru-cache": "^11.2.6",
|
|
"openai": "^4.104.0",
|
|
"supermemory": "^4.25.4",
|
|
"zod": "^4.1.5"
|
|
},
|
|
"devDependencies": {
|
|
"@ai-sdk/provider": "^3.0.0",
|
|
"@anthropic-ai/sdk": "^0.65.0",
|
|
"@voltagent/core": "^2.6.12",
|
|
"@mastra/core": "^1.0.0",
|
|
"@total-typescript/tsconfig": "^1.0.4",
|
|
"@types/bun": "^1.2.21",
|
|
"dotenv": "^16.6.1",
|
|
"tsdown": "^0.14.2",
|
|
"typescript": "^5.9.2",
|
|
"vitest": "^3.2.4"
|
|
},
|
|
"peerDependencies": {
|
|
"@ai-sdk/provider": "^2.0.0 || ^3.0.0",
|
|
"@voltagent/core": "^2.6.12"
|
|
},
|
|
"peerDependenciesMeta": {
|
|
"@voltagent/core": {
|
|
"optional": true
|
|
}
|
|
},
|
|
"main": "./dist/index.js",
|
|
"module": "./dist/index.js",
|
|
"types": "./dist/index.d.ts",
|
|
"files": [
|
|
"dist"
|
|
],
|
|
"exports": {
|
|
".": "./dist/index.js",
|
|
"./ai-sdk": "./dist/ai-sdk.js",
|
|
"./claude-memory": "./dist/claude-memory.js",
|
|
"./mastra": "./dist/mastra.js",
|
|
"./openai": "./dist/openai/index.js",
|
|
"./voltagent": "./dist/voltagent/index.js",
|
|
"./package.json": "./package.json"
|
|
},
|
|
"repository": {
|
|
"url": "https://github.com/supermemoryai/supermemory",
|
|
"directory": "packages/tools"
|
|
},
|
|
"keywords": [
|
|
"ai",
|
|
"sdk",
|
|
"openai",
|
|
"typescript",
|
|
"supermemory",
|
|
"memory",
|
|
"context",
|
|
"tools"
|
|
],
|
|
"license": "MIT"
|
|
}
|