memvault 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -116,7 +116,7 @@ const { tools, handleToolCall } = createMemVaultTools({ vault, tenantId: user.id
116
116
 
117
117
  while (true) {
118
118
  const response = await openai.chat.completions.create({
119
- model: "gpt-4o",
119
+ model: "gpt-5.4",
120
120
  tools,
121
121
  messages,
122
122
  })
@@ -142,7 +142,7 @@ Always call memvault_recall at the start of each conversation before responding.
142
142
  Save anything the user tells you about their preferences or context with memvault_remember.
143
143
  ```
144
144
 
145
- Without this, some models (especially GPT-4o) may skip recall unless explicitly instructed.
145
+ Without this, some models may skip recall unless explicitly instructed.
146
146
 
147
147
  ## Tools
148
148
 
@@ -10,7 +10,7 @@ import { g as ToolsConfig } from '../types-BbBXYjeB.js';
10
10
  * const { tools, handleToolCall } = createMemVaultTools({ vault, tenantId: user.id })
11
11
  *
12
12
  * const response = await openai.responses.create({
13
- * model: "gpt-4o",
13
+ * model: "gpt-5.4",
14
14
  * tools,
15
15
  * input: "Help the user..."
16
16
  * })
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/integrations/openai.ts"],"sourcesContent":["import type { ToolsConfig, TenantVaultInstance } from \"../types.js\";\n\n/**\n * Tool definitions for the OpenAI SDK (Responses API & Chat Completions).\n *\n * Usage:\n * ```ts\n * import { createMemVaultTools, handleToolCall } from \"memvault/openai\"\n *\n * const { tools, handleToolCall } = createMemVaultTools({ vault, tenantId: user.id })\n *\n * const response = await openai.responses.create({\n * model: \"gpt-4o\",\n * tools,\n * input: \"Help the user...\"\n * })\n * ```\n */\n\ninterface OpenAIFunctionTool {\n type: \"function\";\n function: {\n name: string;\n description: string;\n parameters: Record<string, unknown>;\n };\n}\n\nexport function createMemVaultTools(config: ToolsConfig) {\n const tenant = config.vault.tenant(config.tenantId);\n\n const tools: OpenAIFunctionTool[] = [\n {\n type: \"function\",\n function: {\n name: \"memvault_remember\",\n description:\n \"Save important information to persistent memory for this user. \" +\n \"Use this when the user shares preferences, facts about themselves, \" +\n \"project context, feedback, or anything worth remembering across sessions.\",\n parameters: {\n type: \"object\",\n properties: {\n content: {\n type: \"string\",\n description:\n \"The information to remember. Be specific and concise.\",\n },\n type: {\n type: \"string\",\n description:\n 'Category: \"preference\", \"fact\", \"feedback\", \"project\", \"reference\", or any custom type. Defaults to \"general\".',\n },\n tags: {\n type: \"array\",\n items: { type: \"string\" },\n description: \"Tags for categorization and filtering.\",\n },\n ttl: {\n type: \"number\",\n description:\n \"Time-to-live in seconds. Omit for permanent memory.\",\n },\n },\n required: [\"content\"],\n },\n },\n },\n {\n type: \"function\",\n function: {\n name: \"memvault_recall\",\n description:\n \"Retrieve memories for this user. Call this at the START of every conversation \" +\n \"before responding — even if the user hasn't asked. Use it whenever you need \" +\n \"context about preferences, past conversations, or project details.\",\n parameters: {\n type: \"object\",\n properties: {\n type: {\n type: \"string\",\n description: \"Filter by memory type.\",\n },\n tags: {\n type: \"array\",\n items: { type: \"string\" },\n description: \"Filter by tags.\",\n },\n search: {\n type: \"string\",\n description: \"Search memory content (case-insensitive).\",\n },\n limit: {\n type: \"number\",\n description: \"Max number of memories to return.\",\n },\n },\n required: [],\n },\n },\n },\n {\n type: \"function\",\n function: {\n name: \"memvault_forget\",\n description:\n \"Delete a specific memory by ID. Use when the user asks to forget something.\",\n parameters: {\n type: \"object\",\n properties: {\n id: { type: \"string\", description: \"The memory ID to delete.\" },\n },\n required: [\"id\"],\n },\n },\n },\n {\n type: \"function\",\n function: {\n name: \"memvault_update\",\n description:\n \"Update an existing memory. Use when information has changed.\",\n parameters: {\n type: \"object\",\n properties: {\n id: { type: \"string\", description: \"The memory ID to update.\" },\n content: { type: \"string\", description: \"New content.\" },\n type: { type: \"string\", description: \"New type.\" },\n tags: {\n type: \"array\",\n items: { type: \"string\" },\n description: \"New tags.\",\n },\n },\n required: [\"id\"],\n },\n },\n },\n ];\n\n /**\n * Execute a tool call returned by the OpenAI API.\n * Pass the function name and parsed arguments.\n */\n async function handleToolCall(\n name: string,\n args: Record<string, unknown>,\n ): Promise<string> {\n switch (name) {\n case \"memvault_remember\": {\n const memory = await tenant.remember({\n content: args.content as string,\n type: args.type as string | undefined,\n tags: args.tags as string[] | undefined,\n ttl: args.ttl as number | undefined,\n });\n return JSON.stringify({\n success: true,\n id: memory.id,\n message: `Remembered: \"${memory.content}\"`,\n });\n }\n case \"memvault_recall\": {\n const memories = await tenant.recall({\n type: args.type as string | undefined,\n tags: args.tags as string[] | undefined,\n search: args.search as string | undefined,\n limit: args.limit as number | undefined,\n });\n return JSON.stringify({\n count: memories.length,\n memories: memories.map((m) => ({\n id: m.id,\n type: m.type,\n content: m.content,\n tags: m.tags,\n createdAt: m.createdAt.toISOString(),\n })),\n });\n }\n case \"memvault_forget\": {\n await tenant.forget(args.id as string);\n return JSON.stringify({\n success: true,\n message: `Memory ${args.id} deleted.`,\n });\n }\n case \"memvault_update\": {\n const { id, ...updates } = args;\n const memory = await tenant.update(id as string, updates);\n return JSON.stringify({\n success: true,\n id: memory.id,\n message: `Updated memory: \"${memory.content}\"`,\n });\n }\n default:\n return JSON.stringify({ error: `Unknown tool: ${name}` });\n }\n }\n\n return { tools, handleToolCall };\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/integrations/openai.ts"],"sourcesContent":["import type { ToolsConfig, TenantVaultInstance } from \"../types.js\";\n\n/**\n * Tool definitions for the OpenAI SDK (Responses API & Chat Completions).\n *\n * Usage:\n * ```ts\n * import { createMemVaultTools, handleToolCall } from \"memvault/openai\"\n *\n * const { tools, handleToolCall } = createMemVaultTools({ vault, tenantId: user.id })\n *\n * const response = await openai.responses.create({\n * model: \"gpt-5.4\",\n * tools,\n * input: \"Help the user...\"\n * })\n * ```\n */\n\ninterface OpenAIFunctionTool {\n type: \"function\";\n function: {\n name: string;\n description: string;\n parameters: Record<string, unknown>;\n };\n}\n\nexport function createMemVaultTools(config: ToolsConfig) {\n const tenant = config.vault.tenant(config.tenantId);\n\n const tools: OpenAIFunctionTool[] = [\n {\n type: \"function\",\n function: {\n name: \"memvault_remember\",\n description:\n \"Save important information to persistent memory for this user. \" +\n \"Use this when the user shares preferences, facts about themselves, \" +\n \"project context, feedback, or anything worth remembering across sessions.\",\n parameters: {\n type: \"object\",\n properties: {\n content: {\n type: \"string\",\n description:\n \"The information to remember. Be specific and concise.\",\n },\n type: {\n type: \"string\",\n description:\n 'Category: \"preference\", \"fact\", \"feedback\", \"project\", \"reference\", or any custom type. Defaults to \"general\".',\n },\n tags: {\n type: \"array\",\n items: { type: \"string\" },\n description: \"Tags for categorization and filtering.\",\n },\n ttl: {\n type: \"number\",\n description:\n \"Time-to-live in seconds. Omit for permanent memory.\",\n },\n },\n required: [\"content\"],\n },\n },\n },\n {\n type: \"function\",\n function: {\n name: \"memvault_recall\",\n description:\n \"Retrieve memories for this user. Call this at the START of every conversation \" +\n \"before responding — even if the user hasn't asked. Use it whenever you need \" +\n \"context about preferences, past conversations, or project details.\",\n parameters: {\n type: \"object\",\n properties: {\n type: {\n type: \"string\",\n description: \"Filter by memory type.\",\n },\n tags: {\n type: \"array\",\n items: { type: \"string\" },\n description: \"Filter by tags.\",\n },\n search: {\n type: \"string\",\n description: \"Search memory content (case-insensitive).\",\n },\n limit: {\n type: \"number\",\n description: \"Max number of memories to return.\",\n },\n },\n required: [],\n },\n },\n },\n {\n type: \"function\",\n function: {\n name: \"memvault_forget\",\n description:\n \"Delete a specific memory by ID. Use when the user asks to forget something.\",\n parameters: {\n type: \"object\",\n properties: {\n id: { type: \"string\", description: \"The memory ID to delete.\" },\n },\n required: [\"id\"],\n },\n },\n },\n {\n type: \"function\",\n function: {\n name: \"memvault_update\",\n description:\n \"Update an existing memory. Use when information has changed.\",\n parameters: {\n type: \"object\",\n properties: {\n id: { type: \"string\", description: \"The memory ID to update.\" },\n content: { type: \"string\", description: \"New content.\" },\n type: { type: \"string\", description: \"New type.\" },\n tags: {\n type: \"array\",\n items: { type: \"string\" },\n description: \"New tags.\",\n },\n },\n required: [\"id\"],\n },\n },\n },\n ];\n\n /**\n * Execute a tool call returned by the OpenAI API.\n * Pass the function name and parsed arguments.\n */\n async function handleToolCall(\n name: string,\n args: Record<string, unknown>,\n ): Promise<string> {\n switch (name) {\n case \"memvault_remember\": {\n const memory = await tenant.remember({\n content: args.content as string,\n type: args.type as string | undefined,\n tags: args.tags as string[] | undefined,\n ttl: args.ttl as number | undefined,\n });\n return JSON.stringify({\n success: true,\n id: memory.id,\n message: `Remembered: \"${memory.content}\"`,\n });\n }\n case \"memvault_recall\": {\n const memories = await tenant.recall({\n type: args.type as string | undefined,\n tags: args.tags as string[] | undefined,\n search: args.search as string | undefined,\n limit: args.limit as number | undefined,\n });\n return JSON.stringify({\n count: memories.length,\n memories: memories.map((m) => ({\n id: m.id,\n type: m.type,\n content: m.content,\n tags: m.tags,\n createdAt: m.createdAt.toISOString(),\n })),\n });\n }\n case \"memvault_forget\": {\n await tenant.forget(args.id as string);\n return JSON.stringify({\n success: true,\n message: `Memory ${args.id} deleted.`,\n });\n }\n case \"memvault_update\": {\n const { id, ...updates } = args;\n const memory = await tenant.update(id as string, updates);\n return JSON.stringify({\n success: true,\n id: memory.id,\n message: `Updated memory: \"${memory.content}\"`,\n });\n }\n default:\n return JSON.stringify({ error: `Unknown tool: ${name}` });\n }\n }\n\n return { tools, handleToolCall };\n}\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "memvault",
3
- "version": "0.0.2",
3
+ "version": "0.0.3",
4
4
  "description": "Persistent, tenant-isolated memory tools for AI agents. Drop-in tools for Vercel AI SDK, OpenAI, and Anthropic. Prisma-powered.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -33,7 +33,10 @@
33
33
  "test": "vitest run",
34
34
  "test:watch": "vitest",
35
35
  "lint": "tsc --noEmit",
36
- "prepublishOnly": "npm run build"
36
+ "prepublishOnly": "npm run build",
37
+ "docs:dev": "vitepress dev docs",
38
+ "docs:build": "vitepress build docs",
39
+ "docs:preview": "vitepress preview docs"
37
40
  },
38
41
  "keywords": [
39
42
  "ai",
@@ -52,6 +55,7 @@
52
55
  ],
53
56
  "author": "iamsaad640",
54
57
  "license": "MIT",
58
+ "homepage": "https://iamsaad640.github.io/memvault",
55
59
  "repository": {
56
60
  "type": "git",
57
61
  "url": "https://github.com/iamsaad640/memvault.git"
@@ -84,6 +88,7 @@
84
88
  "prisma": "7.6.0",
85
89
  "tsup": "8.5.1",
86
90
  "typescript": "6.0.2",
91
+ "vitepress": "^1.6.4",
87
92
  "vitest": "4.1.2",
88
93
  "zod": "4.3.6"
89
94
  }