squish-memory 0.9.2 → 0.9.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.
@@ -14,6 +14,24 @@ GOOGLE_CLOUD_LOCATION=us-central1
14
14
  # Or use service account:
15
15
  # GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json
16
16
 
17
+ # OpenAI Embeddings (optional, 1536-dim)
18
+ # SQUISH_OPENAI_API_KEY=sk-...
19
+ # SQUISH_OPENAI_API_URL=https://api.openai.com/v1/embeddings
20
+ # SQUISH_OPENAI_EMBEDDING_MODEL=text-embedding-3-small
21
+
22
+ # Ollama Embeddings (optional, model-dependent dims)
23
+ # SQUISH_OLLAMA_URL=http://localhost:11434
24
+ # SQUISH_OLLAMA_EMBEDDING_MODEL=nomic-embed-text:v1.5
25
+
26
+ # Embedding performance & reliability
27
+ SQUISH_EMBEDDINGS_TIMEOUT_MS=30000
28
+ SQUISH_EMBEDDINGS_MAX_RETRIES=3
29
+ SQUISH_EMBEDDINGS_RETRY_DELAY_MS=1000
30
+ # Per-provider overrides (optional)
31
+ # SQUISH_OPENAI_TIMEOUT_MS=30000
32
+ # SQUISH_OLLAMA_TIMEOUT_MS=30000
33
+ # SQUISH_GOOGLE_MULTIMODAL_TIMEOUT_MS=30000
34
+
17
35
  # QMD for local markdown search
18
36
  SQUISH_QMD_ENABLED=true
19
37
  SQUISH_QMD_COLLECTIONS=./qmd-collections
@@ -28,3 +46,8 @@ SQUISH_QMD_FALLBACK=hybrid
28
46
  SQUISH_LIFECYCLE_ENABLED=true
29
47
  SQUISH_SUMMARIZATION_ENABLED=true
30
48
  SQUISH_GOVERNANCE_ENABLED=true
49
+
50
+ # Core Memory Configuration (v0.9.2+)
51
+ # Increase limits for daily agent usage (default: 16KB total, 4KB per section)
52
+ # SQUISH_CORE_MEMORY_TOTAL_BYTES=16384
53
+ # SQUISH_CORE_MEMORY_SECTION_BYTES=4096
package/CHANGELOG.md CHANGED
@@ -2,6 +2,40 @@
2
2
 
3
3
  All notable changes to Squish will be documented in this file.
4
4
 
5
+ ## [0.9.3] - 2026-03-14
6
+
7
+ ### Added - Core Memory & Embeddings Improvements (v0.9.2+)
8
+
9
+ #### Expanded Core Memory
10
+ - Increased default core memory limit from 2KB to 16KB total (4KB per section)
11
+ - Configurable limits via `SQUISH_CORE_MEMORY_TOTAL_BYTES` and `SQUISH_CORE_MEMORY_SECTION_BYTES`
12
+ - Added token estimation for better LLM context budgeting
13
+ - Core memory stats now show both byte and token usage
14
+
15
+ #### Robust Embeddings System
16
+ - Fixed hybrid fallback order: Google Multimodal → OpenAI → Ollama → Local (removed QMD from embedding chain)
17
+ - Added retry logic with exponential backoff (3 retries default)
18
+ - Added configurable timeouts (default 30s) with per-provider overrides
19
+ - New `checkEmbeddingProviderHealth()` function for monitoring
20
+ - Improved error handling and graceful degradation
21
+
22
+ #### Enhanced Configuration
23
+ - New environment variables for fine-tuning:
24
+ - `SQUISH_EMBEDDINGS_TIMEOUT_MS`, `SQUISH_EMBEDDINGS_MAX_RETRIES`, `SQUISH_EMBEDDINGS_RETRY_DELAY_MS`
25
+ - `SQUISH_OPENAI_TIMEOUT_MS`, `SQUISH_OLLAMA_TIMEOUT_MS`, `SQUISH_GOOGLE_MULTIMODAL_TIMEOUT_MS`
26
+ - Better connection handling for all embedding providers
27
+
28
+ ### Changed - Infrastructure
29
+ - Updated CI/CD workflows (`.github/workflows/ci.yml`, `release.yml`)
30
+ - Removed old `mcp-launch-checks.yml` workflow
31
+ - Updated release scripts (auto-detect version, better binary packaging)
32
+ - Database schema: added `tokens_estimate` column to `core_memory` table (auto-migrated)
33
+
34
+ ### Security & developer experience
35
+ - Renamed `.env.mcp` to `.env.mcp.example` (template) - added to `.gitignore`
36
+ - Updated all documentation with new configuration options
37
+ - Improved TypeScript type safety across codebase
38
+
5
39
  ## [0.9.1] - 2026-03-14
6
40
 
7
41
  ### Fixed - CLI & Database
package/QUICK-START.md CHANGED
@@ -27,7 +27,7 @@ curl http://localhost:8767/health
27
27
  {
28
28
  "status": "ok",
29
29
  "server": "squish-mcp",
30
- "version": "0.9.0",
30
+ "version": "0.9.2",
31
31
  "tools": 6
32
32
  }
33
33
  ```
@@ -48,17 +48,23 @@ curl -X POST http://localhost:8767/tools/call \
48
48
 
49
49
  ## Configure
50
50
 
51
- Copy `.env.mcp` to `.env` and customize:
51
+ Copy `.env.mcp.example` to `.env` and customize:
52
52
 
53
53
  ```bash
54
- cp .env.mcp .env
54
+ cp .env.mcp.example .env
55
55
  ```
56
56
 
57
57
  Key settings:
58
58
 
59
59
  - **SQUISH_MCP_PORT**: Server port (default: 8767)
60
- - **SQUISH_EMBEDDINGS_PROVIDER**: local|google-multimodal|hybrid
60
+ - **SQUISH_MCP_SERVER_ENABLED**: Enable/disable MCP server (default: true)
61
+ - **SQUISH_EMBEDDINGS_PROVIDER**: local|openai|ollama|google-multimodal|hybrid (default: local)
62
+ - **SQUISH_MULTIMODAL_EMBEDDINGS_ENABLED**: Enable Google multimodal (default: false)
61
63
  - **SQUISH_QMD_ENABLED**: Enable markdown search (true/false)
64
+ - **SQUISH_CORE_MEMORY_TOTAL_BYTES**: Total core memory limit in bytes (default: 16384)
65
+ - **SQUISH_CORE_MEMORY_SECTION_BYTES**: Per-section limit in bytes (default: 4096)
66
+ - **SQUISH_EMBEDDINGS_TIMEOUT_MS**: Timeout for embedding API calls (default: 30000)
67
+ - **SQUISH_EMBEDDINGS_MAX_RETRIES**: Max retries for failed embedding calls (default: 3)
62
68
 
63
69
  ## Full Docs
64
70
 
package/README.md CHANGED
@@ -188,11 +188,24 @@ PORT=3000 # API server port
188
188
  **Optional:**
189
189
  ```bash
190
190
  SQUISH_DATA_DIR=./.squish # Custom data directory
191
- SQUISH_EMBEDDINGS_PROVIDER=local # local, openai, or ollama
191
+ SQUISH_EMBEDDINGS_PROVIDER=local # local, openai, ollama, google-multimodal, hybrid
192
192
 
193
193
  # For better embeddings (optional)
194
194
  SQUISH_OPENAI_API_KEY=sk-...
195
+ SQUISH_OPENAI_EMBEDDING_MODEL=text-embedding-3-small
195
196
  SQUISH_OLLAMA_URL=http://localhost:11434
197
+ SQUISH_OLLAMA_EMBEDDING_MODEL=nomic-embed-text:v1.5
198
+ SQUISH_GOOGLE_CLOUD_PROJECT=your-project
199
+ SQUISH_GOOGLE_CLOUD_API_KEY=your-key
200
+
201
+ # Embedding performance & reliability
202
+ SQUISH_EMBEDDINGS_TIMEOUT_MS=30000
203
+ SQUISH_EMBEDDINGS_MAX_RETRIES=3
204
+ SQUISH_EMBEDDINGS_RETRY_DELAY_MS=1000
205
+
206
+ # Core memory size (default: 16KB total, 4KB per section)
207
+ SQUISH_CORE_MEMORY_TOTAL_BYTES=16384
208
+ SQUISH_CORE_MEMORY_SECTION_BYTES=4096
196
209
 
197
210
  # For team mode
198
211
  DATABASE_URL=postgresql://user:pass@host/db
@@ -212,7 +225,7 @@ Squish employs a two-tier architecture for optimal performance and reliability:
212
225
  - **CLI**: Standalone command-line tool for shell-based agents and debugging
213
226
 
214
227
  ### Memory Organization
215
- - **Core Memory (2KB)**: Always-visible sections for persona, user info, project context, and working notes
228
+ - **Core Memory (configurable, default 16KB total)**: Always-visible sections for persona, user info, project context, and working notes. Each section limited to 4KB by default. Token estimation helps track LLM context usage.
216
229
  - **Context Paging**: Agent-controlled retrieval with token budgeting (8KB default)
217
230
  - **Background Jobs**: Automatic memory maintenance including decay, deduplication, and consolidation
218
231
 
package/dist/config.d.ts CHANGED
@@ -46,6 +46,14 @@ export declare const config: {
46
46
  cronEnabled: boolean;
47
47
  heartbeatInterval: number;
48
48
  jobRetentionDays: number;
49
+ coreMemoryTotalBytes: number;
50
+ coreMemorySectionBytes: number;
51
+ embeddingsTimeoutMs: number;
52
+ embeddingsMaxRetries: number;
53
+ embeddingsRetryDelayMs: number;
54
+ openAiTimeoutMs: number;
55
+ ollamaTimeoutMs: number;
56
+ googleMultimodalTimeoutMs: number;
49
57
  };
50
58
  export default config;
51
59
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../config.ts"],"names":[],"mappings":"AAGA,wBAAgB,UAAU,IAAI,MAAM,CAMnC;AAkDD,eAAO,MAAM,MAAM;;;;;;;wBAYD,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,mBAAmB;;;;;;;;;;;;4BAkBf,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ;;;;;;qBAYrF,UAAU,GAAG,aAAa,GAAG,QAAQ,GAAG,YAAY;;;;;;;;;;;;;;;;;;mBA8BxB,MAAM,GAAG,UAAU,GAAG,WAAW;;;;CAIlG,CAAC;AAEF,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../config.ts"],"names":[],"mappings":"AAGA,wBAAgB,UAAU,IAAI,MAAM,CAMnC;AAkDD,eAAO,MAAM,MAAM;;;;;;;wBAYD,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,mBAAmB;;;;;;;;;;;;4BAkBf,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ;;;;;;qBAYrF,UAAU,GAAG,aAAa,GAAG,QAAQ,GAAG,YAAY;;;;;;;;;;;;;;;;;;mBA8BvB,MAAM,GAAG,UAAU,GAAG,WAAW;;;;;;;;;;;;CAiBlG,CAAC;AAEH,eAAe,MAAM,CAAC"}
package/dist/config.js CHANGED
@@ -111,6 +111,17 @@ export const config = {
111
111
  cronEnabled: process.env.SQUISH_CRON_ENABLED !== 'false',
112
112
  heartbeatInterval: parseInt(process.env.SQUISH_HEARTBEAT_INTERVAL || '60000'),
113
113
  jobRetentionDays: parseInt(process.env.SQUISH_JOB_RETENTION_DAYS || '30'),
114
+ // Core Memory Configuration (v0.9.2+)
115
+ coreMemoryTotalBytes: parseInt(process.env.SQUISH_CORE_MEMORY_TOTAL_BYTES || '16384'), // 16KB default
116
+ coreMemorySectionBytes: parseInt(process.env.SQUISH_CORE_MEMORY_SECTION_BYTES || '4096'), // 4KB default per section
117
+ // Embeddings Performance & Reliability
118
+ embeddingsTimeoutMs: parseInt(process.env.SQUISH_EMBEDDINGS_TIMEOUT_MS || '30000'), // 30s default
119
+ embeddingsMaxRetries: parseInt(process.env.SQUISH_EMBEDDINGS_MAX_RETRIES || '3'),
120
+ embeddingsRetryDelayMs: parseInt(process.env.SQUISH_EMBEDDINGS_RETRY_DELAY_MS || '1000'),
121
+ // Per-provider timeout overrides
122
+ openAiTimeoutMs: parseInt(process.env.SQUISH_OPENAI_TIMEOUT_MS || process.env.SQUISH_EMBEDDINGS_TIMEOUT_MS || '30000'),
123
+ ollamaTimeoutMs: parseInt(process.env.SQUISH_OLLAMA_TIMEOUT_MS || process.env.SQUISH_EMBEDDINGS_TIMEOUT_MS || '30000'),
124
+ googleMultimodalTimeoutMs: parseInt(process.env.SQUISH_GOOGLE_MULTIMODAL_TIMEOUT_MS || process.env.SQUISH_EMBEDDINGS_TIMEOUT_MS || '30000'),
114
125
  };
115
126
  export default config;
116
127
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../config.ts"],"names":[],"mappings":"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"}
@@ -30,6 +30,7 @@ export declare function editCoreMemorySection(projectId: string, section: CoreMe
30
30
  success: boolean;
31
31
  message?: string;
32
32
  sizeBytes?: number;
33
+ tokensEstimate?: number;
33
34
  }>;
34
35
  /**
35
36
  * Append content to a core memory section
@@ -52,11 +53,15 @@ export declare function replaceCoreMemoryText(projectId: string, section: CoreMe
52
53
  */
53
54
  export declare function getCoreMemoryStats(projectId: string): Promise<{
54
55
  totalBytes: number;
56
+ totalTokens: number;
55
57
  maxBytes: number;
58
+ maxTokens: number;
56
59
  usagePercent: number;
60
+ tokenUsagePercent: number;
57
61
  sections: Array<{
58
62
  section: string;
59
63
  sizeBytes: number;
64
+ tokensEstimate: number;
60
65
  version: number;
61
66
  updatedAt: Date;
62
67
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"core-memory.d.ts","sourceRoot":"","sources":["../../core/core-memory.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,KAAK,iBAAiB,GAAG,SAAS,GAAG,WAAW,GAAG,iBAAiB,GAAG,eAAe,CAAC;AAKvF,UAAU,iBAAiB;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA8B5F;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAuBjF;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,MAAM,CAAC,CAiBjB;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAwCrE;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,iBAAiB,EAC1B,IAAI,EAAE,MAAM,GACX,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAKrE;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAYrE;AA+BD;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;IACnE,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,KAAK,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,IAAI,CAAC;KACjB,CAAC,CAAC;CACJ,CAAC,CAuBD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;GAEG;AACH,wBAAsB,4BAA4B,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAkCrF"}
1
+ {"version":3,"file":"core-memory.d.ts","sourceRoot":"","sources":["../../core/core-memory.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,KAAK,iBAAiB,GAAG,SAAS,GAAG,WAAW,GAAG,iBAAiB,GAAG,eAAe,CAAC;AAMvF,UAAU,iBAAiB;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA8B5F;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAuBjF;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,MAAM,CAAC,CAiBjB;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA0C9F;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,iBAAiB,EAC1B,IAAI,EAAE,MAAM,GACX,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAKrE;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAYrE;AA+BD;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;IACnE,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,KAAK,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,cAAc,EAAE,MAAM,CAAC;QACvB,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,IAAI,CAAC;KACjB,CAAC,CAAC;CACJ,CAAC,CA+BD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;GAEG;AACH,wBAAsB,4BAA4B,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAmCrF"}
@@ -8,8 +8,10 @@ import { eq, and, sql } from 'drizzle-orm';
8
8
  import { getDb } from '../db/index.js';
9
9
  import { getSchema } from '../db/schema.js';
10
10
  import { createDatabaseClient } from './database.js';
11
- const MAX_TOTAL_SIZE_BYTES = 2048; // 2KB limit
12
- const MAX_SECTION_SIZE_BYTES = 1024; // 1KB per section
11
+ import config from '../config.js';
12
+ // Use configurable limits from environment
13
+ const MAX_TOTAL_SIZE_BYTES = config.coreMemoryTotalBytes;
14
+ const MAX_SECTION_SIZE_BYTES = config.coreMemorySectionBytes;
13
15
  /**
14
16
  * Initialize core memory for a project
15
17
  */
@@ -78,6 +80,7 @@ export async function getCoreMemorySection(projectId, section) {
78
80
  */
79
81
  export async function editCoreMemorySection(projectId, section, content) {
80
82
  const sizeBytes = Buffer.byteLength(content, 'utf8');
83
+ const tokensEstimate = estimateTokens(content);
81
84
  // Check section size limit
82
85
  if (sizeBytes > MAX_SECTION_SIZE_BYTES) {
83
86
  return {
@@ -101,11 +104,12 @@ export async function editCoreMemorySection(projectId, section, content) {
101
104
  .set({
102
105
  content,
103
106
  sizeBytes,
107
+ tokensEstimate,
104
108
  version: sql `${coreMemory.version} + 1`,
105
109
  updatedAt: new Date(),
106
110
  })
107
111
  .where(and(eq(coreMemory.projectId, projectId), eq(coreMemory.section, section)));
108
- return { success: true, sizeBytes };
112
+ return { success: true, sizeBytes, tokensEstimate };
109
113
  }
110
114
  /**
111
115
  * Append content to a core memory section
@@ -163,13 +167,20 @@ export async function getCoreMemoryStats(projectId) {
163
167
  .from(coreMemory)
164
168
  .where(eq(coreMemory.projectId, projectId));
165
169
  const totalBytes = sections.reduce((sum, s) => sum + (s.sizeBytes || 0), 0);
170
+ const totalTokens = sections.reduce((sum, s) => sum + (s.tokensEstimate || 0), 0);
171
+ // Estimate max tokens from max bytes (rough approximation: 1 token ≈ 4 chars)
172
+ const maxTokens = Math.floor(MAX_TOTAL_SIZE_BYTES / 4);
166
173
  return {
167
174
  totalBytes,
175
+ totalTokens,
168
176
  maxBytes: MAX_TOTAL_SIZE_BYTES,
177
+ maxTokens,
169
178
  usagePercent: (totalBytes / MAX_TOTAL_SIZE_BYTES) * 100,
179
+ tokenUsagePercent: (totalTokens / maxTokens) * 100,
170
180
  sections: sections.map((s) => ({
171
181
  section: s.section,
172
182
  sizeBytes: s.sizeBytes || 0,
183
+ tokensEstimate: s.tokensEstimate || 0,
173
184
  version: s.version || 1,
174
185
  updatedAt: s.updatedAt,
175
186
  })),
@@ -201,8 +212,9 @@ export async function formatCoreMemoryForInjection(projectId) {
201
212
  formatted += `## Working Notes\n${content.working_notes}\n\n`;
202
213
  }
203
214
  formatted += `---\n`;
204
- formatted += `Core Memory Usage: ${stats.totalBytes}/${stats.maxBytes} bytes (${stats.usagePercent.toFixed(1)}%)\n`;
205
- formatted += `Estimated Tokens: ~${estimateTokens(formatted)}\n\n`;
215
+ formatted += `Core Memory Usage:\n`;
216
+ formatted += `- Bytes: ${stats.totalBytes}/${stats.maxBytes} (${stats.usagePercent.toFixed(1)}%)\n`;
217
+ formatted += `- Tokens: ~${stats.totalTokens}/${stats.maxTokens} (${stats.tokenUsagePercent.toFixed(1)}%)\n\n`;
206
218
  // Add tool usage hints for agent-driven retrieval
207
219
  formatted += `### Memory Tools Available\n`;
208
220
  formatted += `When you need to recall information or store something important, use these tools:\n`;
@@ -1 +1 @@
1
- {"version":3,"file":"core-memory.js","sourceRoot":"","sources":["../../core/core-memory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"core-memory.js","sourceRoot":"","sources":["../../core/core-memory.ts"],"names":[],"mappings":"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"}
@@ -17,4 +17,13 @@ export declare function getEmbeddingCacheStats(): {
17
17
  size: number;
18
18
  maxSize: number;
19
19
  };
20
+ /**
21
+ * Check health of all configured embedding providers
22
+ * Returns availability and latency for each provider
23
+ */
24
+ export declare function checkEmbeddingProviderHealth(): Promise<Map<string, {
25
+ available: boolean;
26
+ latencyMs?: number;
27
+ error?: string;
28
+ }>>;
20
29
  //# sourceMappingURL=embeddings.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"embeddings.d.ts","sourceRoot":"","sources":["../../core/embeddings.ts"],"names":[],"mappings":"AAEA,OAAO,EAAmD,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAGrH,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,mBAAmB,CAAC;AAiCzH,wBAAsB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAsF5F;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,MAAM,EAAE,EAChB,SAAS,GAAE,MAAW,GACrB,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAuCjC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAK1E"}
1
+ {"version":3,"file":"embeddings.d.ts","sourceRoot":"","sources":["../../core/embeddings.ts"],"names":[],"mappings":"AAEA,OAAO,EAAmD,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAGrH,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,mBAAmB,CAAC;AAiHzH,wBAAsB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAqF5F;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,MAAM,EAAE,EAChB,SAAS,GAAE,MAAW,GACrB,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAuCjC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAK1E;AA4KD;;;GAGG;AACH,wBAAsB,4BAA4B,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE;IAAE,SAAS,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAqFrI"}
@@ -2,6 +2,66 @@ import { config } from '../config.js';
2
2
  import { getQMDClient } from './embeddings/qmd-client.js';
3
3
  import { getGoogleMultimodalEmbedding, isMultimodalInput } from './embeddings/google-multimodal.js';
4
4
  import { logger } from './logger.js';
5
+ // Retry utility with exponential backoff
6
+ async function withRetry(fn, maxRetries = config.embeddingsMaxRetries, baseDelayMs = config.embeddingsRetryDelayMs) {
7
+ let lastError;
8
+ for (let attempt = 0; attempt < maxRetries; attempt++) {
9
+ try {
10
+ return await fn();
11
+ }
12
+ catch (error) {
13
+ lastError = error;
14
+ // Only retry on network errors (5xx, ECONNRESET, ETIMEDOUT, etc.)
15
+ if (error instanceof Error && shouldRetryError(error)) {
16
+ const delay = baseDelayMs * Math.pow(2, attempt) + Math.random() * baseDelayMs;
17
+ logger.debug(`Embedding request failed (attempt ${attempt + 1}/${maxRetries}), retrying in ${delay.toFixed(0)}ms`, { error: error });
18
+ await new Promise(resolve => setTimeout(resolve, delay));
19
+ continue;
20
+ }
21
+ // Don't retry on 4xx errors or non-retryable errors
22
+ break;
23
+ }
24
+ }
25
+ throw lastError;
26
+ }
27
+ function shouldRetryError(error) {
28
+ const message = error.message.toLowerCase();
29
+ // Network errors that are typically transient
30
+ const retryablePatterns = [
31
+ 'econnreset',
32
+ 'etimedout',
33
+ 'econnrefused',
34
+ 'esocket',
35
+ 'network error',
36
+ 'fetch failed',
37
+ 'timeout',
38
+ 'request timed out',
39
+ 'service unavailable',
40
+ 'too many requests',
41
+ 'rate limit',
42
+ 'internal server error',
43
+ 'bad gateway',
44
+ 'gateway timeout',
45
+ ];
46
+ return retryablePatterns.some(pattern => message.includes(pattern));
47
+ }
48
+ // Timeout wrapper using AbortController
49
+ async function withTimeout(promise, timeoutMs) {
50
+ const controller = new AbortController();
51
+ const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
52
+ try {
53
+ return await promise;
54
+ }
55
+ finally {
56
+ clearTimeout(timeoutId);
57
+ }
58
+ }
59
+ // Fetch wrapper that combines retry and timeout
60
+ async function fetchWithRetryAndTimeout(url, options, timeoutMs = config.embeddingsTimeoutMs) {
61
+ return withRetry(async () => {
62
+ return withTimeout(fetch(url, options), timeoutMs);
63
+ });
64
+ }
5
65
  // Simple in-memory cache for embeddings (LRU with 1000 entries)
6
66
  const embeddingCache = new Map();
7
67
  const MAX_CACHE_SIZE = 1000;
@@ -68,20 +128,19 @@ export async function getEmbedding(input) {
68
128
  }
69
129
  }
70
130
  else if (provider === 'hybrid') {
71
- // Hybrid mode: Try Google Multimodal first, then QMD, then cloud providers, then local
131
+ // Hybrid mode: Try cloud providers first (best quality), then local fallback
132
+ // Order: Google Multimodal → OpenAI → Ollama → Local TF-IDF
133
+ // Note: QMD is not used for embedding generation (search only)
72
134
  if (config.multimodalEmbeddingsEnabled) {
73
135
  const multimodalResult = await getGoogleMultimodalEmbedding({ text: textInput });
74
136
  result = multimodalResult?.embedding || null;
75
137
  }
76
- if (!result && config.qmdEnabled) {
77
- result = await getQMDEmbedding(textInput);
138
+ if (!result && config.openAiApiKey) {
139
+ result = await getOpenAiEmbedding(textInput);
78
140
  }
79
- if (!result && config.qmdFallbackMode !== 'qmd-only') {
141
+ if (!result && config.ollamaUrl) {
80
142
  result = await getOllamaEmbedding(textInput);
81
143
  }
82
- if (!result && config.qmdFallbackMode !== 'qmd-only' && config.qmdFallbackMode !== 'local-only') {
83
- result = await getOpenAiEmbedding(textInput);
84
- }
85
144
  if (!result) {
86
145
  result = getLocalEmbedding(textInput);
87
146
  }
@@ -253,7 +312,7 @@ async function getQMDEmbedding(input) {
253
312
  return null;
254
313
  }
255
314
  catch (error) {
256
- logger.debug(`QMD embedding unavailable: ${error}`);
315
+ logger.debug('QMD embedding unavailable (expected if QMD server not running)');
257
316
  return null;
258
317
  }
259
318
  }
@@ -271,7 +330,7 @@ async function getOpenAiEmbedding(input) {
271
330
  if (!config.openAiApiKey)
272
331
  return null;
273
332
  try {
274
- const response = await fetch(config.openAiApiUrl, {
333
+ const response = await fetchWithRetryAndTimeout(config.openAiApiUrl, {
275
334
  method: 'POST',
276
335
  headers: {
277
336
  'Content-Type': 'application/json',
@@ -281,10 +340,10 @@ async function getOpenAiEmbedding(input) {
281
340
  model: config.openAiEmbeddingModel,
282
341
  input,
283
342
  }),
284
- });
343
+ }, config.openAiTimeoutMs);
285
344
  if (!response.ok) {
286
345
  const message = await response.text();
287
- console.warn(`OpenAI embeddings failed: ${response.status} ${message}`);
346
+ logger.warn(`OpenAI embeddings failed: ${response.status} ${message}`);
288
347
  return null; // Return null to allow fallback
289
348
  }
290
349
  const payload = await response.json();
@@ -292,31 +351,109 @@ async function getOpenAiEmbedding(input) {
292
351
  return embedding ?? null;
293
352
  }
294
353
  catch (error) {
295
- console.warn('OpenAI embeddings error:', error);
354
+ logger.warn('OpenAI embeddings error:', { error: error });
296
355
  return null; // Return null to allow fallback
297
356
  }
298
357
  }
299
358
  async function getOllamaEmbedding(input) {
300
359
  try {
301
- const response = await fetch(`${config.ollamaUrl}/api/embeddings`, {
360
+ const response = await fetchWithRetryAndTimeout(`${config.ollamaUrl}/api/embeddings`, {
302
361
  method: 'POST',
303
362
  headers: { 'Content-Type': 'application/json' },
304
363
  body: JSON.stringify({
305
364
  model: config.ollamaEmbeddingModel,
306
365
  prompt: input,
307
366
  }),
308
- });
367
+ }, config.ollamaTimeoutMs);
309
368
  if (!response.ok) {
310
369
  const message = await response.text();
311
- console.warn(`Ollama embeddings failed: ${response.status} ${message}`);
370
+ logger.warn(`Ollama embeddings failed: ${response.status} ${message}`);
312
371
  return null; // Return null to allow fallback
313
372
  }
314
373
  const payload = await response.json();
315
374
  return payload.embedding ?? null;
316
375
  }
317
376
  catch (error) {
318
- console.warn('Ollama embeddings error:', error);
377
+ logger.warn('Ollama embeddings error:', { error: error });
319
378
  return null; // Return null to allow fallback
320
379
  }
321
380
  }
381
+ /**
382
+ * Check health of all configured embedding providers
383
+ * Returns availability and latency for each provider
384
+ */
385
+ export async function checkEmbeddingProviderHealth() {
386
+ const results = new Map();
387
+ const providers = ['local', 'openai', 'ollama', 'google-multimodal', 'qmd'];
388
+ // Test local provider (always available)
389
+ results.set('local', { available: true, latencyMs: 0 });
390
+ // Test OpenAI if configured
391
+ if (config.openAiApiKey) {
392
+ const start = Date.now();
393
+ try {
394
+ const testInput = 'health check';
395
+ const embedding = await withRetry(() => withTimeout(getOpenAiEmbedding(testInput), config.openAiTimeoutMs), config.embeddingsMaxRetries, config.embeddingsRetryDelayMs);
396
+ const latency = Date.now() - start;
397
+ results.set('openai', {
398
+ available: embedding !== null && embedding.length > 0,
399
+ latencyMs: latency
400
+ });
401
+ }
402
+ catch (error) {
403
+ results.set('openai', {
404
+ available: false,
405
+ error: error.message
406
+ });
407
+ }
408
+ }
409
+ else {
410
+ results.set('openai', { available: false, error: 'Not configured' });
411
+ }
412
+ // Test Ollama if configured
413
+ if (config.ollamaUrl) {
414
+ const start = Date.now();
415
+ try {
416
+ const testInput = 'health check';
417
+ const embedding = await withRetry(() => withTimeout(getOllamaEmbedding(testInput), config.ollamaTimeoutMs), config.embeddingsMaxRetries, config.embeddingsRetryDelayMs);
418
+ const latency = Date.now() - start;
419
+ results.set('ollama', {
420
+ available: embedding !== null && embedding.length > 0,
421
+ latencyMs: latency
422
+ });
423
+ }
424
+ catch (error) {
425
+ results.set('ollama', {
426
+ available: false,
427
+ error: error.message
428
+ });
429
+ }
430
+ }
431
+ else {
432
+ results.set('ollama', { available: false, error: 'Not configured' });
433
+ }
434
+ // Test Google Multimodal if configured
435
+ if (config.multimodalEmbeddingsEnabled && (config.googleCloudApiKey || config.googleCloudProject)) {
436
+ const start = Date.now();
437
+ try {
438
+ const result = await withRetry(() => withTimeout(getGoogleMultimodalEmbedding({ text: 'health check' }), config.googleMultimodalTimeoutMs), config.embeddingsMaxRetries, config.embeddingsRetryDelayMs);
439
+ const latency = Date.now() - start;
440
+ results.set('google-multimodal', {
441
+ available: result !== null && result.embedding.length > 0,
442
+ latencyMs: latency
443
+ });
444
+ }
445
+ catch (error) {
446
+ results.set('google-multimodal', {
447
+ available: false,
448
+ error: error.message
449
+ });
450
+ }
451
+ }
452
+ else {
453
+ results.set('google-multimodal', { available: false, error: 'Not configured' });
454
+ }
455
+ // QMD is not used for embedding generation (search only)
456
+ results.set('qmd', { available: false, error: 'QMD not used for embeddings (search only)' });
457
+ return results;
458
+ }
322
459
  //# sourceMappingURL=embeddings.js.map