vesper-memory 0.3.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 (206) hide show
  1. package/.env.example +28 -0
  2. package/CHANGELOG.md +137 -0
  3. package/LICENSE +21 -0
  4. package/README.md +665 -0
  5. package/config/sqlite-schema.sql +413 -0
  6. package/dist/benchmark/index.d.ts +18 -0
  7. package/dist/benchmark/index.d.ts.map +1 -0
  8. package/dist/benchmark/index.js +19 -0
  9. package/dist/benchmark/index.js.map +1 -0
  10. package/dist/benchmark/metrics-collector.d.ts +90 -0
  11. package/dist/benchmark/metrics-collector.d.ts.map +1 -0
  12. package/dist/benchmark/metrics-collector.js +196 -0
  13. package/dist/benchmark/metrics-collector.js.map +1 -0
  14. package/dist/benchmark/report-generator.d.ts +35 -0
  15. package/dist/benchmark/report-generator.d.ts.map +1 -0
  16. package/dist/benchmark/report-generator.js +221 -0
  17. package/dist/benchmark/report-generator.js.map +1 -0
  18. package/dist/benchmark/runner.d.ts +30 -0
  19. package/dist/benchmark/runner.d.ts.map +1 -0
  20. package/dist/benchmark/runner.js +308 -0
  21. package/dist/benchmark/runner.js.map +1 -0
  22. package/dist/benchmark/scenarios/context-recall.d.ts +65 -0
  23. package/dist/benchmark/scenarios/context-recall.d.ts.map +1 -0
  24. package/dist/benchmark/scenarios/context-recall.js +180 -0
  25. package/dist/benchmark/scenarios/context-recall.js.map +1 -0
  26. package/dist/benchmark/scenarios/index.d.ts +34 -0
  27. package/dist/benchmark/scenarios/index.d.ts.map +1 -0
  28. package/dist/benchmark/scenarios/index.js +230 -0
  29. package/dist/benchmark/scenarios/index.js.map +1 -0
  30. package/dist/benchmark/statistics.d.ts +125 -0
  31. package/dist/benchmark/statistics.d.ts.map +1 -0
  32. package/dist/benchmark/statistics.js +520 -0
  33. package/dist/benchmark/statistics.js.map +1 -0
  34. package/dist/benchmark/types.d.ts +458 -0
  35. package/dist/benchmark/types.d.ts.map +1 -0
  36. package/dist/benchmark/types.js +297 -0
  37. package/dist/benchmark/types.js.map +1 -0
  38. package/dist/cli 2.js +583 -0
  39. package/dist/cli.d 2.ts +8 -0
  40. package/dist/cli.d.ts +8 -0
  41. package/dist/cli.d.ts 2.map +1 -0
  42. package/dist/cli.d.ts.map +1 -0
  43. package/dist/cli.js +583 -0
  44. package/dist/cli.js 2.map +1 -0
  45. package/dist/cli.js.map +1 -0
  46. package/dist/config/rate-limits.d.ts +76 -0
  47. package/dist/config/rate-limits.d.ts.map +1 -0
  48. package/dist/config/rate-limits.js +161 -0
  49. package/dist/config/rate-limits.js.map +1 -0
  50. package/dist/config 2/rate-limits.d.ts +76 -0
  51. package/dist/config 2/rate-limits.d.ts.map +1 -0
  52. package/dist/config 2/rate-limits.js +161 -0
  53. package/dist/config 2/rate-limits.js.map +1 -0
  54. package/dist/consolidation/pipeline.d.ts +52 -0
  55. package/dist/consolidation/pipeline.d.ts.map +1 -0
  56. package/dist/consolidation/pipeline.js +193 -0
  57. package/dist/consolidation/pipeline.js.map +1 -0
  58. package/dist/consolidation 2/pipeline.d.ts +52 -0
  59. package/dist/consolidation 2/pipeline.d.ts.map +1 -0
  60. package/dist/consolidation 2/pipeline.js +193 -0
  61. package/dist/consolidation 2/pipeline.js.map +1 -0
  62. package/dist/embeddings/client.d.ts +95 -0
  63. package/dist/embeddings/client.d.ts.map +1 -0
  64. package/dist/embeddings/client.js +162 -0
  65. package/dist/embeddings/client.js.map +1 -0
  66. package/dist/embeddings 2/client.d.ts +94 -0
  67. package/dist/embeddings 2/client.d.ts.map +1 -0
  68. package/dist/embeddings 2/client.js +144 -0
  69. package/dist/embeddings 2/client.js.map +1 -0
  70. package/dist/memory-layers/semantic-memory.d.ts +76 -0
  71. package/dist/memory-layers/semantic-memory.d.ts.map +1 -0
  72. package/dist/memory-layers/semantic-memory.js +231 -0
  73. package/dist/memory-layers/semantic-memory.js.map +1 -0
  74. package/dist/memory-layers/skill-library.d.ts +25 -0
  75. package/dist/memory-layers/skill-library.d.ts.map +1 -0
  76. package/dist/memory-layers/skill-library.js +54 -0
  77. package/dist/memory-layers/skill-library.js.map +1 -0
  78. package/dist/memory-layers/working-memory.d.ts +57 -0
  79. package/dist/memory-layers/working-memory.d.ts.map +1 -0
  80. package/dist/memory-layers/working-memory.js +153 -0
  81. package/dist/memory-layers/working-memory.js.map +1 -0
  82. package/dist/memory-layers 2/semantic-memory.d.ts +33 -0
  83. package/dist/memory-layers 2/semantic-memory.d.ts.map +1 -0
  84. package/dist/memory-layers 2/semantic-memory.js +114 -0
  85. package/dist/memory-layers 2/semantic-memory.js.map +1 -0
  86. package/dist/memory-layers 2/skill-library.d.ts +25 -0
  87. package/dist/memory-layers 2/skill-library.d.ts.map +1 -0
  88. package/dist/memory-layers 2/skill-library.js +54 -0
  89. package/dist/memory-layers 2/skill-library.js.map +1 -0
  90. package/dist/memory-layers 2/working-memory.d.ts +57 -0
  91. package/dist/memory-layers 2/working-memory.d.ts.map +1 -0
  92. package/dist/memory-layers 2/working-memory.js +153 -0
  93. package/dist/memory-layers 2/working-memory.js.map +1 -0
  94. package/dist/middleware/auth.d.ts +287 -0
  95. package/dist/middleware/auth.d.ts.map +1 -0
  96. package/dist/middleware/auth.js +610 -0
  97. package/dist/middleware/auth.js.map +1 -0
  98. package/dist/middleware 2/auth.d.ts +287 -0
  99. package/dist/middleware 2/auth.d.ts.map +1 -0
  100. package/dist/middleware 2/auth.js +610 -0
  101. package/dist/middleware 2/auth.js.map +1 -0
  102. package/dist/monitoring/health.d.ts +241 -0
  103. package/dist/monitoring/health.d.ts.map +1 -0
  104. package/dist/monitoring/health.js +649 -0
  105. package/dist/monitoring/health.js.map +1 -0
  106. package/dist/monitoring/metrics.d.ts +153 -0
  107. package/dist/monitoring/metrics.d.ts.map +1 -0
  108. package/dist/monitoring/metrics.js +349 -0
  109. package/dist/monitoring/metrics.js.map +1 -0
  110. package/dist/monitoring 2/health.d.ts +241 -0
  111. package/dist/monitoring 2/health.d.ts.map +1 -0
  112. package/dist/monitoring 2/health.js +649 -0
  113. package/dist/monitoring 2/health.js.map +1 -0
  114. package/dist/monitoring 2/metrics.d.ts +153 -0
  115. package/dist/monitoring 2/metrics.d.ts.map +1 -0
  116. package/dist/monitoring 2/metrics.js +349 -0
  117. package/dist/monitoring 2/metrics.js.map +1 -0
  118. package/dist/retrieval/hybrid-search.d.ts +186 -0
  119. package/dist/retrieval/hybrid-search.d.ts.map +1 -0
  120. package/dist/retrieval/hybrid-search.js +330 -0
  121. package/dist/retrieval/hybrid-search.js.map +1 -0
  122. package/dist/retrieval 2/hybrid-search.d.ts +186 -0
  123. package/dist/retrieval 2/hybrid-search.d.ts.map +1 -0
  124. package/dist/retrieval 2/hybrid-search.js +327 -0
  125. package/dist/retrieval 2/hybrid-search.js.map +1 -0
  126. package/dist/router/smart-router.d.ts +157 -0
  127. package/dist/router/smart-router.d.ts.map +1 -0
  128. package/dist/router/smart-router.js +524 -0
  129. package/dist/router/smart-router.js.map +1 -0
  130. package/dist/router 2/smart-router.d.ts +111 -0
  131. package/dist/router 2/smart-router.d.ts.map +1 -0
  132. package/dist/router 2/smart-router.js +383 -0
  133. package/dist/router 2/smart-router.js.map +1 -0
  134. package/dist/security/rate-limit-middleware.d.ts +119 -0
  135. package/dist/security/rate-limit-middleware.d.ts.map +1 -0
  136. package/dist/security/rate-limit-middleware.js +193 -0
  137. package/dist/security/rate-limit-middleware.js.map +1 -0
  138. package/dist/security 2/rate-limit-middleware.d.ts +119 -0
  139. package/dist/security 2/rate-limit-middleware.d.ts.map +1 -0
  140. package/dist/security 2/rate-limit-middleware.js +193 -0
  141. package/dist/security 2/rate-limit-middleware.js.map +1 -0
  142. package/dist/server 2.js +861 -0
  143. package/dist/server-wrapper 2.js +170 -0
  144. package/dist/server-wrapper.d 2.ts +12 -0
  145. package/dist/server-wrapper.d.ts +12 -0
  146. package/dist/server-wrapper.d.ts 2.map +1 -0
  147. package/dist/server-wrapper.d.ts.map +1 -0
  148. package/dist/server-wrapper.js +170 -0
  149. package/dist/server-wrapper.js 2.map +1 -0
  150. package/dist/server-wrapper.js.map +1 -0
  151. package/dist/server.d 2.ts +14 -0
  152. package/dist/server.d.ts +14 -0
  153. package/dist/server.d.ts 2.map +1 -0
  154. package/dist/server.d.ts.map +1 -0
  155. package/dist/server.js +656 -0
  156. package/dist/server.js 2.map +1 -0
  157. package/dist/server.js.map +1 -0
  158. package/dist/synthesis/conflict-detector.d.ts +43 -0
  159. package/dist/synthesis/conflict-detector.d.ts.map +1 -0
  160. package/dist/synthesis/conflict-detector.js +125 -0
  161. package/dist/synthesis/conflict-detector.js.map +1 -0
  162. package/dist/synthesis 2/conflict-detector.d.ts +43 -0
  163. package/dist/synthesis 2/conflict-detector.d.ts.map +1 -0
  164. package/dist/synthesis 2/conflict-detector.js +125 -0
  165. package/dist/synthesis 2/conflict-detector.js.map +1 -0
  166. package/dist/utils/monitoring.d.ts +25 -0
  167. package/dist/utils/monitoring.d.ts.map +1 -0
  168. package/dist/utils/monitoring.js +41 -0
  169. package/dist/utils/monitoring.js.map +1 -0
  170. package/dist/utils/rate-limiter.d.ts +97 -0
  171. package/dist/utils/rate-limiter.d.ts.map +1 -0
  172. package/dist/utils/rate-limiter.js +166 -0
  173. package/dist/utils/rate-limiter.js.map +1 -0
  174. package/dist/utils/validation.d.ts +139 -0
  175. package/dist/utils/validation.d.ts.map +1 -0
  176. package/dist/utils/validation.js +195 -0
  177. package/dist/utils/validation.js.map +1 -0
  178. package/dist/utils 2/monitoring.d.ts +25 -0
  179. package/dist/utils 2/monitoring.d.ts.map +1 -0
  180. package/dist/utils 2/monitoring.js +41 -0
  181. package/dist/utils 2/monitoring.js.map +1 -0
  182. package/dist/utils 2/rate-limiter.d.ts +97 -0
  183. package/dist/utils 2/rate-limiter.d.ts.map +1 -0
  184. package/dist/utils 2/rate-limiter.js +166 -0
  185. package/dist/utils 2/rate-limiter.js.map +1 -0
  186. package/dist/utils 2/validation.d.ts +139 -0
  187. package/dist/utils 2/validation.d.ts.map +1 -0
  188. package/dist/utils 2/validation.js +195 -0
  189. package/dist/utils 2/validation.js.map +1 -0
  190. package/docker-compose.yml +65 -0
  191. package/embedding-service/Dockerfile +29 -0
  192. package/embedding-service/README.md +68 -0
  193. package/embedding-service/requirements.txt +6 -0
  194. package/embedding-service/server.py +110 -0
  195. package/package.json +92 -0
  196. package/scripts/FRESH_INSTALL.md +280 -0
  197. package/scripts/README.md +101 -0
  198. package/scripts/ensure-infrastructure.sh +38 -0
  199. package/scripts/fresh-install-auto.sh +96 -0
  200. package/scripts/fresh-install.sh +167 -0
  201. package/scripts/health-check.sh +72 -0
  202. package/scripts/init-qdrant.ts +201 -0
  203. package/scripts/postinstall.js +94 -0
  204. package/scripts/run-accuracy-benchmark.ts +1237 -0
  205. package/scripts/run-real-benchmark.ts +581 -0
  206. package/scripts/test-mcp-server.sh +38 -0
@@ -0,0 +1,65 @@
1
+ services:
2
+ # Vector Database for embeddings and semantic search
3
+ qdrant:
4
+ image: qdrant/qdrant:v1.7.4
5
+ container_name: vesper-qdrant
6
+ ports:
7
+ - "6333:6333"
8
+ volumes:
9
+ - qdrant_storage:/qdrant/storage
10
+ restart: unless-stopped
11
+ networks:
12
+ - vesper-network
13
+ healthcheck:
14
+ test: ["CMD-SHELL", "bash -c 'echo -e \"GET /healthz HTTP/1.1\\r\\nHost: localhost\\r\\n\\r\\n\" > /dev/tcp/localhost/6333'"]
15
+ interval: 10s
16
+ timeout: 5s
17
+ retries: 5
18
+ start_period: 30s
19
+
20
+ # Cache layer and working memory
21
+ redis:
22
+ image: redis:7-alpine
23
+ container_name: vesper-redis
24
+ ports:
25
+ - "6379:6379"
26
+ volumes:
27
+ - redis_storage:/data
28
+ command: redis-server --appendonly yes
29
+ restart: unless-stopped
30
+ networks:
31
+ - vesper-network
32
+ healthcheck:
33
+ test: ["CMD", "redis-cli", "ping"]
34
+ interval: 10s
35
+ timeout: 5s
36
+ retries: 5
37
+ start_period: 10s
38
+
39
+ # BGE-large Embedding Service
40
+ embedding:
41
+ build:
42
+ context: ./embedding-service
43
+ dockerfile: Dockerfile
44
+ container_name: vesper-embedding
45
+ ports:
46
+ - "8000:8000"
47
+ restart: unless-stopped
48
+ networks:
49
+ - vesper-network
50
+ healthcheck:
51
+ test: ["CMD", "python", "-c", "import requests; requests.get('http://localhost:8000/health').raise_for_status()"]
52
+ interval: 30s
53
+ timeout: 10s
54
+ retries: 3
55
+ start_period: 60s
56
+
57
+ networks:
58
+ vesper-network:
59
+ driver: bridge
60
+
61
+ volumes:
62
+ qdrant_storage:
63
+ driver: local
64
+ redis_storage:
65
+ driver: local
@@ -0,0 +1,29 @@
1
+ FROM python:3.11-slim
2
+
3
+ WORKDIR /app
4
+
5
+ # Install system dependencies
6
+ RUN apt-get update && apt-get install -y \
7
+ gcc \
8
+ g++ \
9
+ && rm -rf /var/lib/apt/lists/*
10
+
11
+ # Copy requirements and install Python dependencies
12
+ COPY requirements.txt .
13
+ RUN pip install --no-cache-dir -r requirements.txt
14
+
15
+ # Pre-download the BGE-large model to avoid runtime download
16
+ RUN python -c "from sentence_transformers import SentenceTransformer; SentenceTransformer('BAAI/bge-large-en-v1.5')"
17
+
18
+ # Copy application code
19
+ COPY server.py .
20
+
21
+ # Expose port
22
+ EXPOSE 8000
23
+
24
+ # Health check
25
+ HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \
26
+ CMD python -c "import requests; requests.get('http://localhost:8000/health').raise_for_status()"
27
+
28
+ # Run the server
29
+ CMD ["python", "server.py"]
@@ -0,0 +1,68 @@
1
+ # BGE-Large Embedding Service
2
+
3
+ REST API for generating 1024-dimensional semantic embeddings using BGE-large-en-v1.5.
4
+
5
+ ## Setup
6
+
7
+ ```bash
8
+ # Install dependencies
9
+ pip install -r requirements.txt
10
+
11
+ # Start server
12
+ python server.py
13
+ ```
14
+
15
+ The service will start on `http://localhost:8000`
16
+
17
+ ## API Endpoints
18
+
19
+ ### Health Check
20
+ ```bash
21
+ curl http://localhost:8000/health
22
+ ```
23
+
24
+ ### Single/Multiple Embeddings
25
+ ```bash
26
+ curl -X POST http://localhost:8000/embed \
27
+ -H "Content-Type: application/json" \
28
+ -d '{"text": "Hello world"}'
29
+
30
+ # Multiple texts
31
+ curl -X POST http://localhost:8000/embed \
32
+ -H "Content-Type: application/json" \
33
+ -d '{"text": ["Hello", "World"]}'
34
+ ```
35
+
36
+ ### Batch Processing
37
+ ```bash
38
+ curl -X POST http://localhost:8000/embed/batch \
39
+ -H "Content-Type: application/json" \
40
+ -d '{
41
+ "texts": ["text1", "text2", "text3"],
42
+ "batch_size": 32
43
+ }'
44
+ ```
45
+
46
+ ## Integration
47
+
48
+ From TypeScript/Node.js:
49
+
50
+ ```typescript
51
+ async function getEmbedding(text: string): Promise<number[]> {
52
+ const response = await fetch('http://localhost:8000/embed', {
53
+ method: 'POST',
54
+ headers: { 'Content-Type': 'application/json' },
55
+ body: JSON.stringify({ text })
56
+ });
57
+
58
+ const data = await response.json();
59
+ return data.embeddings[0];
60
+ }
61
+ ```
62
+
63
+ ## Performance
64
+
65
+ - **Model**: BAAI/bge-large-en-v1.5
66
+ - **Dimensions**: 1024
67
+ - **Throughput**: ~100-200 embeddings/sec (CPU), ~1000+/sec (GPU)
68
+ - **Latency**: ~10-50ms per text (CPU), ~1-5ms (GPU)
@@ -0,0 +1,6 @@
1
+ flask==3.0.0
2
+ sentence-transformers==3.3.1
3
+ torch==2.5.1
4
+ transformers==4.47.1
5
+ numpy==1.26.3
6
+ requests==2.31.0
@@ -0,0 +1,110 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ BGE-Large Embedding Service - v3.0
4
+
5
+ Simple REST API for generating embeddings using BGE-large-en-v1.5.
6
+ Returns 1024-dimensional dense vectors for semantic search.
7
+ """
8
+
9
+ from flask import Flask, request, jsonify
10
+ from sentence_transformers import SentenceTransformer
11
+ import numpy as np
12
+
13
+ app = Flask(__name__)
14
+
15
+ # Load BGE-large model (1024-dim embeddings)
16
+ print("Loading BGE-large-en-v1.5 model...")
17
+ model = SentenceTransformer('BAAI/bge-large-en-v1.5')
18
+ print("Model loaded successfully!")
19
+
20
+ @app.route('/health', methods=['GET'])
21
+ def health():
22
+ """Health check endpoint"""
23
+ return jsonify({"status": "healthy", "model": "BGE-large-en-v1.5", "dimensions": 1024})
24
+
25
+ @app.route('/embed', methods=['POST'])
26
+ def embed():
27
+ """
28
+ Generate embeddings for text
29
+
30
+ Request:
31
+ {
32
+ "text": "string" or ["array", "of", "strings"],
33
+ "normalize": true # optional, default true
34
+ }
35
+
36
+ Response:
37
+ {
38
+ "embeddings": [[...], [...]],
39
+ "dimensions": 1024,
40
+ "count": 2
41
+ }
42
+ """
43
+ try:
44
+ data = request.json
45
+ text = data.get('text')
46
+ normalize = data.get('normalize', True)
47
+
48
+ if not text:
49
+ return jsonify({"error": "Missing 'text' field"}), 400
50
+
51
+ # Convert single string to list
52
+ if isinstance(text, str):
53
+ text = [text]
54
+
55
+ # Generate embeddings
56
+ embeddings = model.encode(
57
+ text,
58
+ normalize_embeddings=normalize,
59
+ show_progress_bar=False
60
+ )
61
+
62
+ # Convert to list for JSON serialization
63
+ embeddings_list = embeddings.tolist()
64
+
65
+ return jsonify({
66
+ "embeddings": embeddings_list,
67
+ "dimensions": 1024,
68
+ "count": len(embeddings_list)
69
+ })
70
+
71
+ except Exception as e:
72
+ return jsonify({"error": str(e)}), 500
73
+
74
+ @app.route('/embed/batch', methods=['POST'])
75
+ def embed_batch():
76
+ """
77
+ Batch embedding endpoint with better performance
78
+
79
+ Request:
80
+ {
81
+ "texts": ["text1", "text2", ...],
82
+ "batch_size": 32 # optional
83
+ }
84
+ """
85
+ try:
86
+ data = request.json
87
+ texts = data.get('texts')
88
+ batch_size = data.get('batch_size', 32)
89
+
90
+ if not texts or not isinstance(texts, list):
91
+ return jsonify({"error": "Missing or invalid 'texts' field"}), 400
92
+
93
+ embeddings = model.encode(
94
+ texts,
95
+ batch_size=batch_size,
96
+ normalize_embeddings=True,
97
+ show_progress_bar=False
98
+ )
99
+
100
+ return jsonify({
101
+ "embeddings": embeddings.tolist(),
102
+ "dimensions": 1024,
103
+ "count": len(embeddings)
104
+ })
105
+
106
+ except Exception as e:
107
+ return jsonify({"error": str(e)}), 500
108
+
109
+ if __name__ == '__main__':
110
+ app.run(host='0.0.0.0', port=8000, debug=False)
package/package.json ADDED
@@ -0,0 +1,92 @@
1
+ {
2
+ "name": "vesper-memory",
3
+ "version": "0.3.0",
4
+ "description": "AI memory system for Claude Code - Three-layer architecture with semantic search, knowledge graphs, and intelligent retrieval",
5
+ "type": "module",
6
+ "engines": {
7
+ "node": ">=20.0.0"
8
+ },
9
+ "main": "dist/server.js",
10
+ "bin": {
11
+ "vesper": "dist/cli.js",
12
+ "vesper-server": "dist/server-wrapper.js"
13
+ },
14
+ "files": [
15
+ "dist/",
16
+ "config/",
17
+ "embedding-service/",
18
+ "scripts/",
19
+ "docker-compose.yml",
20
+ ".env.example",
21
+ "README.md",
22
+ "CHANGELOG.md",
23
+ "LICENSE"
24
+ ],
25
+ "keywords": [
26
+ "mcp",
27
+ "mcp-server",
28
+ "model-context-protocol",
29
+ "claude-code",
30
+ "claude",
31
+ "ai-memory",
32
+ "semantic-memory",
33
+ "semantic-search",
34
+ "knowledge-graph",
35
+ "embeddings",
36
+ "rag",
37
+ "retrieval-augmented-generation",
38
+ "vector-database",
39
+ "qdrant",
40
+ "redis",
41
+ "bge-embeddings",
42
+ "typescript"
43
+ ],
44
+ "author": "David Fitzsimmons",
45
+ "repository": {
46
+ "type": "git",
47
+ "url": "https://github.com/fitz2882/vesper.git"
48
+ },
49
+ "bugs": {
50
+ "url": "https://github.com/fitz2882/vesper/issues"
51
+ },
52
+ "homepage": "https://github.com/fitz2882/vesper#readme",
53
+ "license": "MIT",
54
+ "scripts": {
55
+ "postinstall": "node scripts/postinstall.js",
56
+ "dev": "node --loader ts-node/esm src/server.ts",
57
+ "build": "tsc",
58
+ "test": "vitest",
59
+ "test:ui": "vitest --ui",
60
+ "benchmark": "vitest run tests/benchmarks/memory-performance.test.ts",
61
+ "benchmark:scientific": "vitest run tests/benchmark/",
62
+ "benchmark:unit": "vitest run tests/benchmark/statistics.test.ts tests/benchmark/types.test.ts tests/benchmark/metrics-collector.test.ts",
63
+ "benchmark:real": "npx tsx scripts/run-real-benchmark.ts",
64
+ "benchmark:accuracy": "npx tsx scripts/run-accuracy-benchmark.ts",
65
+ "lint": "eslint src tests --ext .ts",
66
+ "format": "prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"",
67
+ "init:qdrant": "npx tsx scripts/init-qdrant.ts",
68
+ "fresh-install": "./scripts/fresh-install.sh",
69
+ "fresh-install:auto": "./scripts/fresh-install-auto.sh"
70
+ },
71
+ "dependencies": {
72
+ "@modelcontextprotocol/sdk": "^1.25.3",
73
+ "@qdrant/js-client-rest": "^1.16.2",
74
+ "better-sqlite3": "^9.2.2",
75
+ "ioredis": "^5.3.2",
76
+ "lru-cache": "^10.4.3",
77
+ "zod": "^4.3.6"
78
+ },
79
+ "devDependencies": {
80
+ "@types/better-sqlite3": "^7.6.8",
81
+ "@types/node": "^20.10.6",
82
+ "@typescript-eslint/eslint-plugin": "^8.54.0",
83
+ "@typescript-eslint/parser": "^8.54.0",
84
+ "bintrees": "^1.0.2",
85
+ "dotenv": "^17.2.3",
86
+ "eslint": "^9.39.2",
87
+ "prettier": "^3.1.1",
88
+ "ts-node": "^10.9.2",
89
+ "typescript": "^5.3.3",
90
+ "vitest": "^4.0.18"
91
+ }
92
+ }
@@ -0,0 +1,280 @@
1
+ # Fresh Installation Scripts
2
+
3
+ Complete cleanup and fresh installation scripts for Vesper Memory System.
4
+
5
+ ## Overview
6
+
7
+ These scripts remove **ALL** previous installations and start completely fresh, including:
8
+ - Docker containers, volumes, and networks
9
+ - Node modules and build artifacts
10
+ - All database files and data
11
+ - Logs and temporary files
12
+ - Generated certificates (keeps scripts)
13
+
14
+ **⚠️ WARNING: ALL DATA WILL BE PERMANENTLY DELETED**
15
+
16
+ ## Usage
17
+
18
+ ### Option 1: Interactive (Recommended)
19
+
20
+ **Via npm:**
21
+ ```bash
22
+ npm run fresh-install
23
+ ```
24
+
25
+ **Via make:**
26
+ ```bash
27
+ make fresh-install
28
+ ```
29
+
30
+ **Via script:**
31
+ ```bash
32
+ ./scripts/fresh-install.sh
33
+ ```
34
+
35
+ **Features:**
36
+ - Safety prompts before deletion
37
+ - Interactive .env creation
38
+ - Colored output with progress
39
+ - Next steps guidance
40
+
41
+ ### Option 2: Automated (CI/CD)
42
+
43
+ **Via npm:**
44
+ ```bash
45
+ npm run fresh-install:auto
46
+ ```
47
+
48
+ **Via make:**
49
+ ```bash
50
+ make fresh-install-auto
51
+ ```
52
+
53
+ **Via script:**
54
+ ```bash
55
+ ./scripts/fresh-install-auto.sh
56
+ ```
57
+
58
+ **Features:**
59
+ - No prompts (fully automated)
60
+ - Auto-creates .env from .env.example
61
+ - Set `AUTO_START=true` to automatically start services
62
+ - Ideal for CI/CD pipelines
63
+
64
+ **Example with auto-start:**
65
+ ```bash
66
+ AUTO_START=true npm run fresh-install:auto
67
+ ```
68
+
69
+ ## What Gets Deleted
70
+
71
+ ### Docker Resources
72
+ - All containers (stopped and running)
73
+ - All volumes (all data lost)
74
+ - All networks
75
+ - Dangling images
76
+
77
+ ### Application Files
78
+ - `node_modules/` - All installed dependencies
79
+ - `package-lock.json` - Lock file
80
+ - `dist/` - Build artifacts
81
+ - `.cache/` - Build cache
82
+ - `.turbo/` - Turbo cache
83
+ - `coverage/` - Test coverage
84
+
85
+ ### Data Directories
86
+ - `data/` - SQLite database and application data
87
+ - `logs/` - All log files
88
+ - `.redis-data/` - Redis persistent data
89
+ - `.postgres-data/` - PostgreSQL data
90
+ - `.qdrant-data/` - Qdrant vector data
91
+
92
+ ### Certificates
93
+ - `config/ssl/*` - All certificate files (keeps .sh scripts)
94
+
95
+ ## What Gets Preserved
96
+
97
+ - Source code (`src/`)
98
+ - Tests (`tests/`)
99
+ - Configuration files (`config/`)
100
+ - Docker Compose configuration
101
+ - Scripts (`.sh` files)
102
+ - `.env.example` template
103
+ - Documentation
104
+
105
+ ## Installation Steps
106
+
107
+ The scripts perform these steps automatically:
108
+
109
+ 1. **Stop Docker** - Gracefully stop all running containers
110
+ 2. **Remove Volumes** - Delete all Docker volumes (data loss)
111
+ 3. **Remove Networks** - Clean up Docker networks
112
+ 4. **Clean Images** - Remove dangling images
113
+ 5. **Remove Dependencies** - Delete node_modules and lock files
114
+ 6. **Clean Build** - Remove all build artifacts
115
+ 7. **Clean Data** - Delete all database and log files
116
+ 8. **Clean Certificates** - Remove old certificates
117
+ 9. **Install** - Fresh npm install
118
+ 10. **Build** - Build project from source
119
+
120
+ ## Post-Installation Steps
121
+
122
+ After the fresh install completes:
123
+
124
+ ### 1. Configure Environment
125
+ ```bash
126
+ # Edit .env with your settings
127
+ nano .env
128
+ ```
129
+
130
+ **Required changes for production:**
131
+ - Set strong passwords (use `openssl rand -base64 32`)
132
+ - Enable `AUTH_ENABLED=true`
133
+ - Enable `METRICS_AUTH_ENABLED=true`
134
+ - Configure proper domain names
135
+
136
+ ### 2. Generate Certificates
137
+
138
+ **Development:**
139
+ ```bash
140
+ ./scripts/generate-dev-certs.sh
141
+ ```
142
+
143
+ **Production:**
144
+ ```bash
145
+ docker-compose run --rm certbot certonly \
146
+ --webroot --webroot-path=/var/www/certbot \
147
+ -d your-domain.com
148
+ ```
149
+
150
+ ### 3. Start Services
151
+ ```bash
152
+ docker-compose up -d
153
+
154
+ # Or use make
155
+ make docker-up
156
+ ```
157
+
158
+ ### 4. Verify Installation
159
+ ```bash
160
+ # Check service status
161
+ make status
162
+
163
+ # Run tests
164
+ npm test
165
+
166
+ # Check health
167
+ curl -I http://localhost:8080/health
168
+ ```
169
+
170
+ ### 5. Generate API Key (Optional)
171
+ ```bash
172
+ npm run generate-api-key -- --tier unlimited --name 'Development'
173
+ ```
174
+
175
+ ## Troubleshooting
176
+
177
+ ### Permission Denied
178
+
179
+ ```bash
180
+ chmod +x scripts/fresh-install.sh
181
+ chmod +x scripts/fresh-install-auto.sh
182
+ ```
183
+
184
+ ### Docker Issues
185
+
186
+ ```bash
187
+ # If Docker services won't stop
188
+ docker ps -a | grep vesper | awk '{print $1}' | xargs docker rm -f
189
+
190
+ # If volumes won't delete
191
+ docker volume prune -f
192
+ ```
193
+
194
+ ### Build Fails
195
+
196
+ ```bash
197
+ # Clean npm cache
198
+ npm cache clean --force
199
+
200
+ # Try again
201
+ npm run fresh-install
202
+ ```
203
+
204
+ ### Services Won't Start
205
+
206
+ ```bash
207
+ # Check Docker daemon
208
+ docker info
209
+
210
+ # Check logs
211
+ docker-compose logs -f
212
+
213
+ # Restart Docker daemon (macOS)
214
+ killall Docker && open -a Docker
215
+ ```
216
+
217
+ ## CI/CD Integration
218
+
219
+ ### GitHub Actions Example
220
+
221
+ ```yaml
222
+ - name: Fresh Install Vesper
223
+ run: npm run fresh-install:auto
224
+ env:
225
+ AUTO_START: true
226
+ AUTH_ENABLED: false # Disable for testing
227
+ ```
228
+
229
+ ### Docker Compose Example
230
+
231
+ ```yaml
232
+ version: '3.8'
233
+ services:
234
+ vesper-install:
235
+ image: node:20
236
+ volumes:
237
+ - .:/app
238
+ working_dir: /app
239
+ command: /app/scripts/fresh-install-auto.sh
240
+ ```
241
+
242
+ ## Safety Features
243
+
244
+ ### Interactive Script
245
+ - Requires explicit "yes" confirmation
246
+ - Shows detailed warning of what will be deleted
247
+ - Prompts for .env creation
248
+ - Provides next steps guidance
249
+
250
+ ### Automated Script
251
+ - Designed for trusted environments only
252
+ - No user interaction required
253
+ - Logs all actions
254
+ - Returns non-zero exit code on failure
255
+
256
+ ## Performance
257
+
258
+ **Typical runtime:** 2-5 minutes (depending on network speed)
259
+
260
+ **Breakdown:**
261
+ - Cleanup: 10-30 seconds
262
+ - npm install: 1-3 minutes
263
+ - Build: 30-60 seconds
264
+
265
+ ## Best Practices
266
+
267
+ 1. **Backup First** - Always backup important data before running
268
+ 2. **Use Interactive** - Use interactive version for manual operations
269
+ 3. **Use Automated** - Use automated version only for CI/CD
270
+ 4. **Review Output** - Check output for any errors
271
+ 5. **Verify Installation** - Run tests after installation
272
+
273
+ ## Support
274
+
275
+ If you encounter issues:
276
+
277
+ 1. Check the troubleshooting section above
278
+ 2. Review logs: `docker-compose logs -f`
279
+ 3. Check Docker status: `make status`
280
+ 4. File an issue: https://github.com/fitz2882/vesper/issues