vesper-memory 0.5.4 → 0.6.0

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.
Files changed (80) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/README.md +6 -6
  3. package/config/sqlite-schema.sql +31 -0
  4. package/dist/cli.js +6 -49
  5. package/dist/cli.js.map +1 -1
  6. package/dist/consolidation/pipeline.d.ts +25 -6
  7. package/dist/consolidation/pipeline.d.ts.map +1 -1
  8. package/dist/consolidation/pipeline.js +310 -67
  9. package/dist/consolidation/pipeline.js.map +1 -1
  10. package/dist/memory-layers/semantic-memory.d.ts +8 -3
  11. package/dist/memory-layers/semantic-memory.d.ts.map +1 -1
  12. package/dist/memory-layers/semantic-memory.js +110 -50
  13. package/dist/memory-layers/semantic-memory.js.map +1 -1
  14. package/dist/memory-layers/skill-library.d.ts +9 -9
  15. package/dist/memory-layers/skill-library.d.ts.map +1 -1
  16. package/dist/memory-layers/skill-library.js +85 -56
  17. package/dist/memory-layers/skill-library.js.map +1 -1
  18. package/dist/memory-layers/working-memory.d.ts +2 -2
  19. package/dist/memory-layers/working-memory.d.ts.map +1 -1
  20. package/dist/memory-layers/working-memory.js +57 -47
  21. package/dist/memory-layers/working-memory.js.map +1 -1
  22. package/dist/retrieval/hybrid-search.d.ts.map +1 -1
  23. package/dist/retrieval/hybrid-search.js +10 -5
  24. package/dist/retrieval/hybrid-search.js.map +1 -1
  25. package/dist/retrieval/index-outbox.d.ts +50 -0
  26. package/dist/retrieval/index-outbox.d.ts.map +1 -0
  27. package/dist/retrieval/index-outbox.js +225 -0
  28. package/dist/retrieval/index-outbox.js.map +1 -0
  29. package/dist/retrieval/memory-retriever.d.ts +123 -0
  30. package/dist/retrieval/memory-retriever.d.ts.map +1 -0
  31. package/dist/retrieval/memory-retriever.js +723 -0
  32. package/dist/retrieval/memory-retriever.js.map +1 -0
  33. package/dist/router/smart-router.js +18 -18
  34. package/dist/server-wrapper.js +0 -0
  35. package/dist/server.d.ts +9 -1
  36. package/dist/server.d.ts.map +1 -1
  37. package/dist/server.js +859 -355
  38. package/dist/server.js.map +1 -1
  39. package/dist/utils/claude-mcp-config.d.ts +3 -0
  40. package/dist/utils/claude-mcp-config.d.ts.map +1 -0
  41. package/dist/utils/claude-mcp-config.js +42 -0
  42. package/dist/utils/claude-mcp-config.js.map +1 -0
  43. package/dist/utils/monitoring.d.ts +1 -0
  44. package/dist/utils/monitoring.d.ts.map +1 -1
  45. package/dist/utils/monitoring.js +1 -0
  46. package/dist/utils/monitoring.js.map +1 -1
  47. package/dist/utils/paths.d.ts +13 -1
  48. package/dist/utils/paths.d.ts.map +1 -1
  49. package/dist/utils/paths.js +24 -0
  50. package/dist/utils/paths.js.map +1 -1
  51. package/dist/utils/validation.d.ts +14 -2
  52. package/dist/utils/validation.d.ts.map +1 -1
  53. package/dist/utils/validation.js +64 -48
  54. package/dist/utils/validation.js.map +1 -1
  55. package/docker-compose.yml +3 -3
  56. package/package.json +7 -4
  57. package/scripts/README.md +1 -1
  58. package/scripts/health-check.sh +8 -4
  59. package/scripts/init-qdrant.ts +42 -60
  60. package/scripts/test-mcp-server.sh +2 -2
  61. package/dist/config/rate-limits.d.ts +0 -76
  62. package/dist/config/rate-limits.d.ts.map +0 -1
  63. package/dist/config/rate-limits.js +0 -161
  64. package/dist/config/rate-limits.js.map +0 -1
  65. package/dist/middleware/auth.d.ts +0 -287
  66. package/dist/middleware/auth.d.ts.map +0 -1
  67. package/dist/middleware/auth.js +0 -610
  68. package/dist/middleware/auth.js.map +0 -1
  69. package/dist/monitoring/health.d.ts +0 -241
  70. package/dist/monitoring/health.d.ts.map +0 -1
  71. package/dist/monitoring/health.js +0 -649
  72. package/dist/monitoring/health.js.map +0 -1
  73. package/dist/monitoring/metrics.d.ts +0 -153
  74. package/dist/monitoring/metrics.d.ts.map +0 -1
  75. package/dist/monitoring/metrics.js +0 -349
  76. package/dist/monitoring/metrics.js.map +0 -1
  77. package/dist/security/rate-limit-middleware.d.ts +0 -119
  78. package/dist/security/rate-limit-middleware.d.ts.map +0 -1
  79. package/dist/security/rate-limit-middleware.js +0 -193
  80. package/dist/security/rate-limit-middleware.js.map +0 -1
@@ -11,8 +11,8 @@
11
11
  * - Vector value validation (NaN/Infinity prevention)
12
12
  * - Collection name sanitization (injection prevention)
13
13
  */
14
- import { z } from 'zod';
15
- import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js';
14
+ import { z } from "zod";
15
+ import { McpError, ErrorCode } from "@modelcontextprotocol/sdk/types.js";
16
16
  // ============================================================================
17
17
  // Reusable Schemas
18
18
  // ============================================================================
@@ -22,7 +22,8 @@ import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js';
22
22
  * Alphanumeric with hyphens/underscores, defaults to "default".
23
23
  * Used across all tools to scope memory operations.
24
24
  */
25
- export const NamespaceSchema = z.string()
25
+ export const NamespaceSchema = z
26
+ .string()
26
27
  .regex(/^[a-zA-Z][a-zA-Z0-9_-]*$/, "Namespace must start with a letter and contain only alphanumeric characters, underscores, or hyphens")
27
28
  .min(1, "Namespace cannot be empty")
28
29
  .max(100, "Namespace cannot exceed 100 characters")
@@ -31,12 +32,16 @@ export const NamespaceSchema = z.string()
31
32
  * Memory type enum including decision type for v0.5.0
32
33
  */
33
34
  export const MemoryTypeEnum = z.enum(["episodic", "semantic", "procedural", "decision"], {
34
- message: "Invalid memory type. Must be episodic, semantic, procedural, or decision"
35
+ message: "Invalid memory type. Must be episodic, semantic, procedural, or decision",
35
36
  });
36
37
  /**
37
38
  * Memory type enum for filtering (retrieve/list operations)
38
39
  */
39
40
  export const MemoryTypeFilterEnum = z.enum(["episodic", "semantic", "procedural", "decision"]);
41
+ export const TimestampInputSchema = z.union([
42
+ z.number().int().nonnegative(),
43
+ z.string().datetime({ offset: true }),
44
+ ]);
40
45
  // ============================================================================
41
46
  // MCP Tool Input Schemas
42
47
  // ============================================================================
@@ -51,11 +56,10 @@ export const MemoryTypeFilterEnum = z.enum(["episodic", "semantic", "procedural"
51
56
  * - Agent attribution fields (agent_id, agent_role, task_id)
52
57
  */
53
58
  export const StoreMemoryInputSchema = z.object({
54
- content: z.string()
55
- .min(1, "Content cannot be empty")
56
- .max(100000, "Content exceeds 100KB limit"),
59
+ content: z.string().min(1, "Content cannot be empty").max(100000, "Content exceeds 100KB limit"),
57
60
  memory_type: MemoryTypeEnum,
58
- metadata: z.record(z.string(), z.unknown())
61
+ metadata: z
62
+ .record(z.string(), z.unknown())
59
63
  .optional()
60
64
  .refine((val) => !val || Object.keys(val).length <= 50, "Metadata cannot exceed 50 keys")
61
65
  .refine((val) => !val || JSON.stringify(val).length <= 10000, "Metadata size exceeds 10KB limit"),
@@ -63,6 +67,10 @@ export const StoreMemoryInputSchema = z.object({
63
67
  agent_id: z.string().max(255).optional(),
64
68
  agent_role: z.string().max(255).optional(),
65
69
  task_id: z.string().max(255).optional(),
70
+ importance: z.number().min(0).max(1).optional().default(0.5),
71
+ valid_from: TimestampInputSchema.optional(),
72
+ valid_until: TimestampInputSchema.optional(),
73
+ expired_at: TimestampInputSchema.optional(),
66
74
  });
67
75
  /**
68
76
  * Schema for retrieve_memory tool input
@@ -75,30 +83,34 @@ export const StoreMemoryInputSchema = z.object({
75
83
  * - Agent/task filtering
76
84
  */
77
85
  export const RetrieveMemoryInputSchema = z.object({
78
- query: z.string()
79
- .min(1, "Query cannot be empty")
80
- .max(10000, "Query exceeds 10KB limit"),
81
- memory_types: z.array(MemoryTypeFilterEnum)
86
+ query: z.string().min(1, "Query cannot be empty").max(10000, "Query exceeds 10KB limit"),
87
+ memory_types: z
88
+ .array(MemoryTypeFilterEnum)
82
89
  .max(10, "Cannot filter by more than 10 memory types")
83
90
  .optional(),
84
- max_results: z.number()
91
+ max_results: z
92
+ .number()
85
93
  .int("max_results must be an integer")
86
94
  .min(1, "max_results must be at least 1")
87
95
  .max(100, "max_results cannot exceed 100")
88
96
  .optional()
89
97
  .default(5),
90
- routing_strategy: z.enum(["fast_path", "semantic", "full_text", "graph"])
91
- .optional(),
98
+ routing_strategy: z.enum(["fast_path", "semantic", "full_text", "hybrid", "graph"]).optional(),
92
99
  namespace: NamespaceSchema.optional().default("default"),
93
100
  agent_id: z.string().max(255).optional(),
94
101
  task_id: z.string().max(255).optional(),
95
102
  exclude_agent: z.string().max(255).optional(),
103
+ include_superseded: z.boolean().optional().default(false),
104
+ include_archived: z.boolean().optional().default(false),
105
+ as_of: TimestampInputSchema.optional(),
106
+ explain: z.boolean().optional().default(false),
96
107
  });
97
108
  /**
98
109
  * Schema for list_recent tool input
99
110
  */
100
111
  export const ListRecentInputSchema = z.object({
101
- limit: z.number()
112
+ limit: z
113
+ .number()
102
114
  .int("limit must be an integer")
103
115
  .min(1, "limit must be at least 1")
104
116
  .max(100, "limit cannot exceed 100")
@@ -111,9 +123,7 @@ export const ListRecentInputSchema = z.object({
111
123
  * Schema for get_stats tool input
112
124
  */
113
125
  export const GetStatsInputSchema = z.object({
114
- detailed: z.boolean()
115
- .optional()
116
- .default(false),
126
+ detailed: z.boolean().optional().default(false),
117
127
  namespace: NamespaceSchema.optional().default("default"),
118
128
  });
119
129
  /**
@@ -127,26 +137,28 @@ export const GetStatsInputSchema = z.object({
127
137
  * - outcome must be 'success' or 'failure'
128
138
  * - satisfaction is required for success (0-1 range)
129
139
  */
130
- export const RecordSkillOutcomeInputSchema = z.object({
131
- skill_id: z.string()
132
- .min(1, "skill_id cannot be empty"),
140
+ export const RecordSkillOutcomeInputSchema = z
141
+ .object({
142
+ skill_id: z.string().min(1, "skill_id cannot be empty"),
133
143
  outcome: z.enum(["success", "failure"], {
134
- message: "outcome must be 'success' or 'failure'"
144
+ message: "outcome must be 'success' or 'failure'",
135
145
  }),
136
- satisfaction: z.number()
146
+ satisfaction: z
147
+ .number()
137
148
  .min(0, "satisfaction must be at least 0")
138
149
  .max(1, "satisfaction cannot exceed 1")
139
150
  .optional(),
140
151
  namespace: NamespaceSchema.optional().default("default"),
141
- }).refine((data) => {
152
+ })
153
+ .refine((data) => {
142
154
  // satisfaction is required for success outcome
143
- if (data.outcome === 'success' && data.satisfaction === undefined) {
155
+ if (data.outcome === "success" && data.satisfaction === undefined) {
144
156
  return false;
145
157
  }
146
158
  return true;
147
159
  }, {
148
160
  message: "satisfaction is required when outcome is 'success'",
149
- path: ["satisfaction"]
161
+ path: ["satisfaction"],
150
162
  });
151
163
  /**
152
164
  * Schema for load_skill tool input
@@ -159,7 +171,8 @@ export const RecordSkillOutcomeInputSchema = z.object({
159
171
  * - skill_id must match expected format (skill_*)
160
172
  */
161
173
  export const LoadSkillInputSchema = z.object({
162
- skill_id: z.string()
174
+ skill_id: z
175
+ .string()
163
176
  .min(1, "skill_id cannot be empty")
164
177
  .max(255, "skill_id cannot exceed 255 characters")
165
178
  .regex(/^skill_[a-z0-9_]+$/i, "Invalid skill_id format (must be skill_*)"),
@@ -173,7 +186,8 @@ export const LoadSkillInputSchema = z.object({
173
186
  * - Namespace for multi-agent isolation
174
187
  */
175
188
  export const DeleteMemoryInputSchema = z.object({
176
- memory_id: z.string()
189
+ memory_id: z
190
+ .string()
177
191
  .min(1, "memory_id cannot be empty")
178
192
  .max(255, "memory_id cannot exceed 255 characters"),
179
193
  namespace: NamespaceSchema.optional().default("default"),
@@ -191,35 +205,32 @@ export const ShareContextInputSchema = z.object({
191
205
  source_namespace: NamespaceSchema,
192
206
  target_namespace: NamespaceSchema,
193
207
  task_id: z.string().max(255).optional(),
194
- query: z.string()
208
+ query: z
209
+ .string()
195
210
  .min(1, "Query cannot be empty")
196
211
  .max(10000, "Query exceeds 10KB limit")
197
212
  .optional(),
198
- max_items: z.number()
199
- .int()
200
- .min(1)
201
- .max(50)
202
- .optional()
203
- .default(10),
213
+ max_items: z.number().int().min(1).max(50).optional().default(10),
204
214
  include_skills: z.boolean().optional().default(false),
205
215
  include_entities: z.boolean().optional().default(true),
206
216
  });
207
217
  /**
208
218
  * Schema for store_decision tool input
209
219
  *
210
- * Stores a decision with reduced decay factor and automatic conflict detection.
220
+ * Stores a decision with reduced decay and explicit validity/supersession.
211
221
  * Decisions are stored as memory_type='decision' with decay_factor: 0.25.
212
222
  */
213
223
  export const StoreDecisionInputSchema = z.object({
214
- content: z.string()
215
- .min(1, "Content cannot be empty")
216
- .max(100000, "Content exceeds 100KB limit"),
224
+ content: z.string().min(1, "Content cannot be empty").max(100000, "Content exceeds 100KB limit"),
217
225
  namespace: NamespaceSchema.optional().default("default"),
218
226
  agent_id: z.string().max(255).optional(),
219
227
  agent_role: z.string().max(255).optional(),
220
228
  task_id: z.string().max(255).optional(),
221
229
  supersedes: z.string().max(255).optional(),
222
- metadata: z.record(z.string(), z.unknown())
230
+ valid_from: TimestampInputSchema.optional(),
231
+ valid_until: TimestampInputSchema.optional(),
232
+ metadata: z
233
+ .record(z.string(), z.unknown())
223
234
  .optional()
224
235
  .refine((val) => !val || Object.keys(val).length <= 50, "Metadata cannot exceed 50 keys"),
225
236
  });
@@ -244,8 +255,11 @@ export const NamespaceStatsInputSchema = z.object({
244
255
  *
245
256
  * Security: SEC-005 fix
246
257
  */
247
- export const VectorSchema = z.array(z.number())
248
- .refine((arr) => arr.every(v => Number.isFinite(v)), { message: "Vector contains NaN or Infinity values" });
258
+ export const VectorSchema = z
259
+ .array(z.number())
260
+ .refine((arr) => arr.every((v) => Number.isFinite(v)), {
261
+ message: "Vector contains NaN or Infinity values",
262
+ });
249
263
  /**
250
264
  * Collection name validation schema
251
265
  *
@@ -254,14 +268,16 @@ export const VectorSchema = z.array(z.number())
254
268
  *
255
269
  * Security: SEC-012 fix
256
270
  */
257
- export const CollectionNameSchema = z.string()
271
+ export const CollectionNameSchema = z
272
+ .string()
258
273
  .min(1, "Collection name cannot be empty")
259
274
  .max(255, "Collection name cannot exceed 255 characters")
260
275
  .regex(/^[a-zA-Z][a-zA-Z0-9_-]*$/, "Collection name must start with a letter and contain only alphanumeric characters, underscores, or hyphens");
261
276
  /**
262
277
  * User ID schema (for rate limiting)
263
278
  */
264
- export const UserIdSchema = z.string()
279
+ export const UserIdSchema = z
280
+ .string()
265
281
  .min(1, "User ID cannot be empty")
266
282
  .max(255, "User ID cannot exceed 255 characters")
267
283
  .regex(/^[a-zA-Z0-9_-]+$/, "User ID must be alphanumeric with underscores or hyphens only");
@@ -279,7 +295,7 @@ export const UserIdSchema = z.string()
279
295
  export function validateInput(schema, input) {
280
296
  const result = schema.safeParse(input);
281
297
  if (!result.success) {
282
- const errors = result.error.issues.map(e => `${e.path.join('.')}: ${e.message}`).join(', ');
298
+ const errors = result.error.issues.map((e) => `${e.path.join(".")}: ${e.message}`).join(", ");
283
299
  throw new McpError(ErrorCode.InvalidParams, `Validation failed: ${errors}`);
284
300
  }
285
301
  return result.data;
@@ -298,7 +314,7 @@ export function validateVector(vector, expectedSize) {
298
314
  throw new Error(`Vector dimension mismatch: expected ${expectedSize}, got ${vector.length}`);
299
315
  }
300
316
  // Value validation (NaN/Infinity check)
301
- if (!vector.every(v => Number.isFinite(v))) {
317
+ if (!vector.every((v) => Number.isFinite(v))) {
302
318
  throw new Error("Vector contains invalid values (NaN or Infinity)");
303
319
  }
304
320
  }
@@ -325,7 +341,7 @@ export function sanitizeCollectionName(name) {
325
341
  */
326
342
  export function sanitizeString(input) {
327
343
  // Remove null bytes
328
- let sanitized = input.replace(/\0/g, '');
344
+ let sanitized = input.replace(/\0/g, "");
329
345
  // Trim whitespace
330
346
  sanitized = sanitized.trim();
331
347
  return sanitized;
@@ -1 +1 @@
1
- {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@ services:
4
4
  image: qdrant/qdrant:v1.7.4
5
5
  container_name: ${VESPER_PREFIX:-vesper}-qdrant
6
6
  ports:
7
- - "${QDRANT_PORT:-6333}:6333"
7
+ - "127.0.0.1:${QDRANT_PORT:-6333}:6333"
8
8
  volumes:
9
9
  - ${VESPER_HOME:-~/.vesper}/docker-data/qdrant:/qdrant/storage
10
10
  restart: unless-stopped
@@ -22,7 +22,7 @@ services:
22
22
  image: redis:7-alpine
23
23
  container_name: ${VESPER_PREFIX:-vesper}-redis
24
24
  ports:
25
- - "${REDIS_PORT:-6379}:6379"
25
+ - "127.0.0.1:${REDIS_PORT:-6379}:6379"
26
26
  volumes:
27
27
  - ${VESPER_HOME:-~/.vesper}/docker-data/redis:/data
28
28
  command: redis-server --appendonly yes
@@ -43,7 +43,7 @@ services:
43
43
  dockerfile: Dockerfile
44
44
  container_name: ${VESPER_PREFIX:-vesper}-embedding
45
45
  ports:
46
- - "${EMBEDDING_PORT:-8000}:8000"
46
+ - "127.0.0.1:${EMBEDDING_PORT:-8000}:8000"
47
47
  restart: unless-stopped
48
48
  networks:
49
49
  - vesper-network
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vesper-memory",
3
- "version": "0.5.4",
3
+ "version": "0.6.0",
4
4
  "description": "AI memory system for Claude Code - Three-layer architecture with semantic search, knowledge graphs, and intelligent retrieval",
5
5
  "type": "module",
6
6
  "engines": {
@@ -9,6 +9,7 @@
9
9
  "main": "dist/server.js",
10
10
  "bin": {
11
11
  "vesper": "dist/cli.js",
12
+ "vesper-memory": "dist/cli.js",
12
13
  "vesper-server": "dist/server-wrapper.js"
13
14
  },
14
15
  "files": [
@@ -54,7 +55,8 @@
54
55
  "scripts": {
55
56
  "postinstall": "node scripts/postinstall.js",
56
57
  "dev": "node --loader ts-node/esm src/server.ts",
57
- "build": "tsc",
58
+ "clean": "node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"",
59
+ "build": "npm run clean && tsc",
58
60
  "build:global": "npm run build && npm install -g .",
59
61
  "reinstall": "npm install -g .",
60
62
  "test": "vitest",
@@ -64,7 +66,7 @@
64
66
  "benchmark:unit": "vitest run tests/benchmark/statistics.test.ts tests/benchmark/types.test.ts tests/benchmark/metrics-collector.test.ts",
65
67
  "benchmark:real": "npx tsx scripts/run-real-benchmark.ts",
66
68
  "benchmark:accuracy": "npx tsx scripts/run-accuracy-benchmark.ts",
67
- "lint": "eslint src tests --ext .ts",
69
+ "lint": "eslint src tests",
68
70
  "format": "prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"",
69
71
  "init:qdrant": "npx tsx scripts/init-qdrant.ts",
70
72
  "fresh-install": "./scripts/fresh-install.sh",
@@ -73,7 +75,7 @@
73
75
  "dependencies": {
74
76
  "@modelcontextprotocol/sdk": "^1.25.3",
75
77
  "@qdrant/js-client-rest": "^1.16.2",
76
- "better-sqlite3": "^9.2.2",
78
+ "better-sqlite3": "^12.11.1",
77
79
  "ioredis": "^5.3.2",
78
80
  "lru-cache": "^10.4.3",
79
81
  "zod": "^4.3.6"
@@ -87,6 +89,7 @@
87
89
  "dotenv": "^17.2.3",
88
90
  "eslint": "^9.39.2",
89
91
  "prettier": "^3.1.1",
92
+ "tsx": "^4.23.4",
90
93
  "ts-node": "^10.9.2",
91
94
  "typescript": "^5.3.3",
92
95
  "vitest": "^4.0.18",
package/scripts/README.md CHANGED
@@ -52,7 +52,7 @@ The Memory system is configured to start automatically when Claude Code launches
52
52
 
53
53
  ### Start infrastructure
54
54
  ```bash
55
- cd /Users/fitzy/Documents/MemoryProject
55
+ cd /path/to/vesper-memory
56
56
  docker-compose up -d
57
57
  ```
58
58
 
@@ -19,8 +19,12 @@ fi
19
19
 
20
20
  # Check Redis
21
21
  if docker-compose -f "$PROJECT_DIR/docker-compose.yml" ps redis | grep -q "Up"; then
22
- REDIS_PASSWORD="${REDIS_PASSWORD:-MHot0MIuDfST4QUY6g3WVbLzcDEzJ14B}"
23
- if docker exec memory-redis redis-cli -a "$REDIS_PASSWORD" ping 2>/dev/null | grep -q "PONG"; then
22
+ redis_auth=()
23
+ if [ -n "${REDIS_PASSWORD:-}" ]; then
24
+ export REDISCLI_AUTH="$REDIS_PASSWORD"
25
+ redis_auth=(-e REDISCLI_AUTH)
26
+ fi
27
+ if docker exec "${redis_auth[@]}" memory-redis redis-cli ping 2>/dev/null | grep -q "PONG"; then
24
28
  echo "✅ Redis: Running and responsive"
25
29
  else
26
30
  echo "⚠️ Redis: Running but not responsive"
@@ -59,8 +63,8 @@ else
59
63
  fi
60
64
 
61
65
  # Check MCP config
62
- if [ -f "/Users/fitzy/.claude/mcp_config.json" ]; then
63
- if grep -q "memory" "/Users/fitzy/.claude/mcp_config.json"; then
66
+ if [ -f "$HOME/.claude/mcp_config.json" ]; then
67
+ if grep -q "memory" "$HOME/.claude/mcp_config.json"; then
64
68
  echo "✅ MCP Config: Memory server configured"
65
69
  else
66
70
  echo "⚠️ MCP Config: Memory server not configured"
@@ -45,8 +45,15 @@ async function initializeQdrant(): Promise<InitResult> {
45
45
  console.log(` API Key: ${QDRANT_API_KEY ? "configured" : "not configured"}`);
46
46
 
47
47
  // Create client with optional API key
48
- const clientConfig: { url: string; apiKey?: string } = {
48
+ const clientConfig: {
49
+ url: string;
50
+ apiKey?: string;
51
+ checkCompatibility: boolean;
52
+ } = {
49
53
  url: QDRANT_URL,
54
+ // Vesper's pinned server can be older than the generated REST client. The
55
+ // APIs used by this initializer are covered by integration tests.
56
+ checkCompatibility: false,
50
57
  };
51
58
 
52
59
  if (QDRANT_API_KEY) {
@@ -67,9 +74,7 @@ async function initializeQdrant(): Promise<InitResult> {
67
74
  // Check if collection already exists
68
75
  console.log("\nChecking existing collections...");
69
76
  const collections = await client.getCollections();
70
- const existingCollection = collections.collections.find(
71
- (c) => c.name === COLLECTION_NAME
72
- );
77
+ const existingCollection = collections.collections.find((c) => c.name === COLLECTION_NAME);
73
78
 
74
79
  if (existingCollection) {
75
80
  // Verify configuration matches
@@ -81,71 +86,49 @@ async function initializeQdrant(): Promise<InitResult> {
81
86
  console.warn(
82
87
  ` WARNING: Existing collection has different vector size: ${vectorConfig.size}`
83
88
  );
84
- console.warn(
85
- ` Expected: ${VECTOR_SIZE}. You may need to recreate the collection.`
86
- );
89
+ console.warn(` Expected: ${VECTOR_SIZE}. You may need to recreate the collection.`);
87
90
  } else {
88
91
  console.log(
89
92
  ` Collection '${COLLECTION_NAME}' already exists with correct configuration`
90
93
  );
91
94
  }
92
95
  }
93
-
94
- return {
95
- success: true,
96
- message: `Collection '${COLLECTION_NAME}' already exists`,
97
- collectionName: COLLECTION_NAME,
98
- vectorSize: VECTOR_SIZE,
99
- };
96
+ } else {
97
+ // Create new collection
98
+ console.log(`\nCreating collection '${COLLECTION_NAME}'...`);
99
+ await client.createCollection(COLLECTION_NAME, {
100
+ vectors: {
101
+ size: VECTOR_SIZE,
102
+ distance: "Cosine",
103
+ },
104
+ // Optimize for memory retrieval workload
105
+ optimizers_config: {
106
+ default_segment_number: 2,
107
+ indexing_threshold: 10000,
108
+ },
109
+ // Enable write-ahead logging for durability
110
+ wal_config: {
111
+ wal_capacity_mb: 32,
112
+ wal_segments_ahead: 0,
113
+ },
114
+ });
115
+
116
+ console.log(` Collection created successfully`);
100
117
  }
101
118
 
102
- // Create new collection
103
- console.log(`\nCreating collection '${COLLECTION_NAME}'...`);
104
- await client.createCollection(COLLECTION_NAME, {
105
- vectors: {
106
- size: VECTOR_SIZE,
107
- distance: "Cosine",
108
- },
109
- // Optimize for memory retrieval workload
110
- optimizers_config: {
111
- default_segment_number: 2,
112
- indexing_threshold: 10000,
113
- },
114
- // Enable write-ahead logging for durability
115
- wal_config: {
116
- wal_capacity_mb: 32,
117
- wal_segments_ahead: 0,
118
- },
119
- });
120
-
121
- console.log(` Collection created successfully`);
122
-
123
119
  // Create payload indexes for common query patterns
124
120
  console.log("\nCreating payload indexes...");
125
121
 
126
- // Index for filtering by timestamp
127
- await client.createPayloadIndex(COLLECTION_NAME, {
128
- wait: true, // Wait for index creation to complete
129
- field_name: "timestamp",
130
- field_schema: "datetime",
131
- });
132
- console.log(" Created index: timestamp (datetime)");
133
-
134
- // Index for filtering by source
135
- await client.createPayloadIndex(COLLECTION_NAME, {
136
- wait: true, // Wait for index creation to complete
137
- field_name: "source",
138
- field_schema: "keyword",
139
- });
140
- console.log(" Created index: source (keyword)");
141
-
142
- // Index for filtering by type
143
- await client.createPayloadIndex(COLLECTION_NAME, {
144
- wait: true, // Wait for index creation to complete
145
- field_name: "type",
146
- field_schema: "keyword",
147
- });
148
- console.log(" Created index: type (keyword)");
122
+ // Match the fields used by MemoryRetriever's dense candidate filter. All
123
+ // authorization is still repeated against canonical SQLite rows.
124
+ for (const fieldName of ["namespace", "memory_type", "agent_id", "task_id"]) {
125
+ await client.createPayloadIndex(COLLECTION_NAME, {
126
+ wait: true,
127
+ field_name: fieldName,
128
+ field_schema: "keyword",
129
+ });
130
+ console.log(` Ensured index: ${fieldName} (keyword)`);
131
+ }
149
132
 
150
133
  // Verify collection was created
151
134
  const verifyInfo = await client.getCollection(COLLECTION_NAME);
@@ -161,8 +144,7 @@ async function initializeQdrant(): Promise<InitResult> {
161
144
  vectorSize: VECTOR_SIZE,
162
145
  };
163
146
  } catch (error) {
164
- const errorMessage =
165
- error instanceof Error ? error.message : String(error);
147
+ const errorMessage = error instanceof Error ? error.message : String(error);
166
148
  console.error(`\nError initializing Qdrant: ${errorMessage}`);
167
149
 
168
150
  return {
@@ -13,9 +13,9 @@ echo "================================"
13
13
  # Source environment variables
14
14
  export REDIS_HOST=localhost
15
15
  export REDIS_PORT=6379
16
- export REDIS_PASSWORD="MHot0MIuDfST4QUY6g3WVbLzcDEzJ14B"
16
+ # REDIS_PASSWORD is inherited from the operator environment; no repository default.
17
17
  export QDRANT_URL="http://localhost:6333"
18
- export QDRANT_API_KEY="0mTJEZVwmIXceZM7hYwd2SgZo8sOT21p"
18
+ # QDRANT_API_KEY is inherited from the operator environment; no repository default.
19
19
  export SQLITE_DB="$PROJECT_DIR/data/memory.db"
20
20
  export NODE_ENV=production
21
21