opencode-mem 2.11.7 → 2.11.9
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 +8 -12
- package/dist/config.d.ts +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +2 -0
- package/dist/services/ai/provider-config.d.ts +16 -0
- package/dist/services/ai/provider-config.d.ts.map +1 -0
- package/dist/services/ai/provider-config.js +13 -0
- package/dist/services/ai/providers/anthropic-messages.d.ts.map +1 -1
- package/dist/services/ai/providers/anthropic-messages.js +2 -0
- package/dist/services/ai/providers/google-gemini.d.ts.map +1 -1
- package/dist/services/ai/providers/google-gemini.js +2 -0
- package/dist/services/ai/providers/openai-chat-completion.d.ts.map +1 -1
- package/dist/services/ai/providers/openai-chat-completion.js +6 -0
- package/dist/services/ai/providers/openai-responses.d.ts.map +1 -1
- package/dist/services/ai/providers/openai-responses.js +2 -0
- package/dist/services/api-handlers.d.ts.map +1 -1
- package/dist/services/api-handlers.js +9 -11
- package/dist/services/auto-capture.js +2 -7
- package/dist/services/cleanup-service.js +1 -1
- package/dist/services/client.js +1 -1
- package/dist/services/deduplication-service.js +1 -1
- package/dist/services/logger.d.ts.map +1 -1
- package/dist/services/logger.js +20 -10
- package/dist/services/migration-service.js +3 -3
- package/dist/services/sqlite/shard-manager.d.ts +1 -1
- package/dist/services/sqlite/shard-manager.d.ts.map +1 -1
- package/dist/services/sqlite/shard-manager.js +12 -1
- package/dist/services/sqlite/vector-search.d.ts +8 -4
- package/dist/services/sqlite/vector-search.d.ts.map +1 -1
- package/dist/services/sqlite/vector-search.js +107 -44
- package/dist/services/user-memory-learning.js +2 -7
- package/dist/services/vector-backends/backend-factory.d.ts +3 -0
- package/dist/services/vector-backends/backend-factory.d.ts.map +1 -0
- package/dist/services/vector-backends/backend-factory.js +104 -0
- package/dist/services/vector-backends/exact-scan-backend.d.ts +39 -0
- package/dist/services/vector-backends/exact-scan-backend.d.ts.map +1 -0
- package/dist/services/vector-backends/exact-scan-backend.js +63 -0
- package/dist/services/vector-backends/types.d.ts +51 -0
- package/dist/services/vector-backends/types.d.ts.map +1 -0
- package/dist/services/vector-backends/types.js +1 -0
- package/dist/services/vector-backends/usearch-backend.d.ts +47 -0
- package/dist/services/vector-backends/usearch-backend.d.ts.map +1 -0
- package/dist/services/vector-backends/usearch-backend.js +174 -0
- package/package.json +3 -3
- package/dist/services/sqlite/hnsw-index.d.ts +0 -37
- package/dist/services/sqlite/hnsw-index.d.ts.map +0 -1
- package/dist/services/sqlite/hnsw-index.js +0 -235
package/README.md
CHANGED
|
@@ -20,25 +20,21 @@ A persistent memory system for AI coding agents that enables long-term context r
|
|
|
20
20
|
|
|
21
21
|
## Core Features
|
|
22
22
|
|
|
23
|
-
Local vector database with SQLite +
|
|
23
|
+
Local vector database with SQLite + USearch-first vector indexing and ExactScan fallback, persistent project memories, automatic user profile learning, unified memory-prompt timeline, full-featured web UI, intelligent prompt-based memory extraction, multi-provider AI support (OpenAI, Anthropic), 12+ local embedding models, smart deduplication, and built-in privacy protection.
|
|
24
24
|
|
|
25
25
|
## Prerequisites
|
|
26
26
|
|
|
27
|
-
This plugin uses `
|
|
27
|
+
This plugin uses `USearch` for preferred in-memory vector indexing with automatic ExactScan fallback. No custom SQLite build or browser runtime shim is required.
|
|
28
28
|
|
|
29
|
-
**
|
|
29
|
+
**Recommended runtime:**
|
|
30
30
|
|
|
31
|
-
-
|
|
32
|
-
-
|
|
33
|
-
- `make` or CMake
|
|
31
|
+
- Bun
|
|
32
|
+
- Standard OpenCode plugin environment
|
|
34
33
|
|
|
35
|
-
**
|
|
34
|
+
**Notes:**
|
|
36
35
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
| **macOS** | Xcode Command Line Tools: `xcode-select --install` |
|
|
40
|
-
| **Linux** | Build essentials: `sudo apt install build-essential python3` (Debian/Ubuntu) or `sudo pacman -S base-devel python` (Arch) |
|
|
41
|
-
| **Windows** | Visual Studio Build Tools with C++ workload, or Windows Build Tools: `npm install -g windows-build-tools` |
|
|
36
|
+
- If `USearch` is unavailable or fails at runtime, the plugin automatically falls back to exact vector scanning.
|
|
37
|
+
- SQLite remains the source of truth; search indexes are rebuilt from SQLite data when needed.
|
|
42
38
|
|
|
43
39
|
## Getting Started
|
|
44
40
|
|
package/dist/config.d.ts
CHANGED
|
@@ -20,6 +20,7 @@ export declare const CONFIG: {
|
|
|
20
20
|
memoryApiUrl: string | undefined;
|
|
21
21
|
memoryApiKey: string | undefined;
|
|
22
22
|
memoryTemperature: number | false | undefined;
|
|
23
|
+
vectorBackend: "usearch-first" | "usearch" | "exact-scan";
|
|
23
24
|
aiSessionRetentionDays: number;
|
|
24
25
|
webServerEnabled: boolean;
|
|
25
26
|
webServerPort: number;
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAoaA,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;oBAwBb,aAAa,GACb,kBAAkB,GAClB,WAAW;;;;;mBAMX,eAAe,GACf,SAAS,GACT,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAoCV,OAAO,GACP,QAAQ;;CAEf,CAAC;AAEF,wBAAgB,YAAY,IAAI,OAAO,CAEtC"}
|
package/dist/config.js
CHANGED
|
@@ -27,6 +27,7 @@ const DEFAULTS = {
|
|
|
27
27
|
autoCaptureEnabled: true,
|
|
28
28
|
autoCaptureMaxIterations: 5,
|
|
29
29
|
autoCaptureIterationTimeout: 30000,
|
|
30
|
+
vectorBackend: "usearch-first",
|
|
30
31
|
aiSessionRetentionDays: 7,
|
|
31
32
|
webServerEnabled: true,
|
|
32
33
|
webServerPort: 4747,
|
|
@@ -347,6 +348,7 @@ export const CONFIG = {
|
|
|
347
348
|
memoryApiUrl: fileConfig.memoryApiUrl,
|
|
348
349
|
memoryApiKey: resolveSecretValue(fileConfig.memoryApiKey),
|
|
349
350
|
memoryTemperature: fileConfig.memoryTemperature,
|
|
351
|
+
vectorBackend: (fileConfig.vectorBackend ?? "usearch-first"),
|
|
350
352
|
aiSessionRetentionDays: fileConfig.aiSessionRetentionDays ?? DEFAULTS.aiSessionRetentionDays,
|
|
351
353
|
webServerEnabled: fileConfig.webServerEnabled ?? DEFAULTS.webServerEnabled,
|
|
352
354
|
webServerPort: fileConfig.webServerPort ?? DEFAULTS.webServerPort,
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ProviderConfig } from "./providers/base-provider.js";
|
|
2
|
+
interface MemoryProviderRuntimeConfig {
|
|
3
|
+
memoryModel?: string;
|
|
4
|
+
memoryApiUrl?: string;
|
|
5
|
+
memoryApiKey?: string;
|
|
6
|
+
memoryTemperature?: number | false;
|
|
7
|
+
autoCaptureMaxIterations?: number;
|
|
8
|
+
autoCaptureIterationTimeout?: number;
|
|
9
|
+
}
|
|
10
|
+
interface ProviderConfigOverrides {
|
|
11
|
+
maxIterations?: number;
|
|
12
|
+
iterationTimeout?: number;
|
|
13
|
+
}
|
|
14
|
+
export declare function buildMemoryProviderConfig(config: MemoryProviderRuntimeConfig, overrides?: ProviderConfigOverrides): ProviderConfig;
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=provider-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-config.d.ts","sourceRoot":"","sources":["../../../src/services/ai/provider-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAEnE,UAAU,2BAA2B;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACnC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,2BAA2B,CAAC,EAAE,MAAM,CAAC;CACtC;AAED,UAAU,uBAAuB;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,2BAA2B,EACnC,SAAS,GAAE,uBAA4B,GACtC,cAAc,CAahB"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export function buildMemoryProviderConfig(config, overrides = {}) {
|
|
2
|
+
if (!config.memoryModel || !config.memoryApiUrl) {
|
|
3
|
+
throw new Error("External API not configured for memory provider");
|
|
4
|
+
}
|
|
5
|
+
return {
|
|
6
|
+
model: config.memoryModel,
|
|
7
|
+
apiUrl: config.memoryApiUrl,
|
|
8
|
+
apiKey: config.memoryApiKey,
|
|
9
|
+
memoryTemperature: config.memoryTemperature,
|
|
10
|
+
maxIterations: overrides.maxIterations ?? config.autoCaptureMaxIterations,
|
|
11
|
+
iterationTimeout: overrides.iterationTimeout ?? config.autoCaptureIterationTimeout,
|
|
12
|
+
};
|
|
13
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic-messages.d.ts","sourceRoot":"","sources":["../../../../src/services/ai/providers/anthropic-messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAuB,KAAK,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AA4BvF,qBAAa,yBAA0B,SAAQ,cAAc;IAC3D,OAAO,CAAC,gBAAgB,CAAmB;gBAE/B,MAAM,EAAE,GAAG,EAAE,gBAAgB,EAAE,gBAAgB;IAK3D,eAAe,IAAI,MAAM;IAIzB,eAAe,IAAI,OAAO;IAIpB,eAAe,CACnB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,kBAAkB,EAC9B,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"anthropic-messages.d.ts","sourceRoot":"","sources":["../../../../src/services/ai/providers/anthropic-messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAuB,KAAK,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AA4BvF,qBAAa,yBAA0B,SAAQ,cAAc;IAC3D,OAAO,CAAC,gBAAgB,CAAmB;gBAE/B,MAAM,EAAE,GAAG,EAAE,gBAAgB,EAAE,gBAAgB;IAK3D,eAAe,IAAI,MAAM;IAIzB,eAAe,IAAI,OAAO;IAIpB,eAAe,CACnB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,kBAAkB,EAC9B,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,cAAc,CAAC;IAmL1B,OAAO,CAAC,cAAc;CAavB"}
|
|
@@ -75,6 +75,8 @@ export class AnthropicMessagesProvider extends BaseAIProvider {
|
|
|
75
75
|
if (!response.ok) {
|
|
76
76
|
const errorText = await response.text().catch(() => response.statusText);
|
|
77
77
|
log("Anthropic Messages API error", {
|
|
78
|
+
provider: this.getProviderName(),
|
|
79
|
+
model: this.config.model,
|
|
78
80
|
status: response.status,
|
|
79
81
|
error: errorText,
|
|
80
82
|
iteration: iterations,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"google-gemini.d.ts","sourceRoot":"","sources":["../../../../src/services/ai/providers/google-gemini.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAIlE;;;GAGG;AACH,qBAAa,oBAAqB,SAAQ,cAAc;IACtD,OAAO,CAAC,gBAAgB,CAAmB;gBAE/B,MAAM,EAAE,GAAG,EAAE,gBAAgB,EAAE,gBAAgB;IAK3D,eAAe,IAAI,MAAM;IAIzB,eAAe,IAAI,OAAO;IAI1B,OAAO,CAAC,eAAe;IA4BjB,eAAe,CACnB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,kBAAkB,EAC9B,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"google-gemini.d.ts","sourceRoot":"","sources":["../../../../src/services/ai/providers/google-gemini.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAIlE;;;GAGG;AACH,qBAAa,oBAAqB,SAAQ,cAAc;IACtD,OAAO,CAAC,gBAAgB,CAAmB;gBAE/B,MAAM,EAAE,GAAG,EAAE,gBAAgB,EAAE,gBAAgB;IAK3D,eAAe,IAAI,MAAM;IAIzB,eAAe,IAAI,OAAO;IAI1B,OAAO,CAAC,eAAe;IA4BjB,eAAe,CACnB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,kBAAkB,EAC9B,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,cAAc,CAAC;CA2N3B"}
|
|
@@ -145,6 +145,8 @@ export class GoogleGeminiProvider extends BaseAIProvider {
|
|
|
145
145
|
if (!response.ok) {
|
|
146
146
|
const errorText = await response.text().catch(() => response.statusText);
|
|
147
147
|
log("Gemini API error", {
|
|
148
|
+
provider: this.getProviderName(),
|
|
149
|
+
model: this.config.model,
|
|
148
150
|
status: response.status,
|
|
149
151
|
error: errorText,
|
|
150
152
|
iteration: iterations,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai-chat-completion.d.ts","sourceRoot":"","sources":["../../../../src/services/ai/providers/openai-chat-completion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAqBlE,qBAAa,4BAA6B,SAAQ,cAAc;IAC9D,OAAO,CAAC,gBAAgB,CAAmB;gBAE/B,MAAM,EAAE,GAAG,EAAE,gBAAgB,EAAE,gBAAgB;IAK3D,eAAe,IAAI,MAAM;IAIzB,eAAe,IAAI,OAAO;IAI1B,OAAO,CAAC,eAAe;IAqBvB,OAAO,CAAC,iCAAiC;IAoCnC,eAAe,CACnB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,kBAAkB,EAC9B,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"openai-chat-completion.d.ts","sourceRoot":"","sources":["../../../../src/services/ai/providers/openai-chat-completion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAqBlE,qBAAa,4BAA6B,SAAQ,cAAc;IAC9D,OAAO,CAAC,gBAAgB,CAAmB;gBAE/B,MAAM,EAAE,GAAG,EAAE,gBAAgB,EAAE,gBAAgB;IAK3D,eAAe,IAAI,MAAM;IAIzB,eAAe,IAAI,OAAO;IAI1B,OAAO,CAAC,eAAe;IAqBvB,OAAO,CAAC,iCAAiC;IAoCnC,eAAe,CACnB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,kBAAkB,EAC9B,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,cAAc,CAAC;CA+Q3B"}
|
|
@@ -136,6 +136,8 @@ export class OpenAIChatCompletionProvider extends BaseAIProvider {
|
|
|
136
136
|
if (!response.ok) {
|
|
137
137
|
const errorText = await response.text().catch(() => response.statusText);
|
|
138
138
|
log("OpenAI Chat Completion API error", {
|
|
139
|
+
provider: this.getProviderName(),
|
|
140
|
+
model: this.config.model,
|
|
139
141
|
status: response.status,
|
|
140
142
|
error: errorText,
|
|
141
143
|
iteration: iterations,
|
|
@@ -156,6 +158,8 @@ export class OpenAIChatCompletionProvider extends BaseAIProvider {
|
|
|
156
158
|
const data = (await response.json());
|
|
157
159
|
if (data.status && data.msg) {
|
|
158
160
|
log("API returned error in response body", {
|
|
161
|
+
provider: this.getProviderName(),
|
|
162
|
+
model: this.config.model,
|
|
159
163
|
status: data.status,
|
|
160
164
|
msg: data.msg,
|
|
161
165
|
});
|
|
@@ -167,6 +171,8 @@ export class OpenAIChatCompletionProvider extends BaseAIProvider {
|
|
|
167
171
|
}
|
|
168
172
|
if (!data.choices || !data.choices[0]) {
|
|
169
173
|
log("Invalid API response format", {
|
|
174
|
+
provider: this.getProviderName(),
|
|
175
|
+
model: this.config.model,
|
|
170
176
|
response: JSON.stringify(data).slice(0, 1000),
|
|
171
177
|
hasChoices: !!data.choices,
|
|
172
178
|
choicesLength: data.choices?.length,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai-responses.d.ts","sourceRoot":"","sources":["../../../../src/services/ai/providers/openai-responses.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAuB,KAAK,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAsBvF,qBAAa,uBAAwB,SAAQ,cAAc;IACzD,OAAO,CAAC,gBAAgB,CAAmB;gBAE/B,MAAM,EAAE,GAAG,EAAE,gBAAgB,EAAE,gBAAgB;IAK3D,eAAe,IAAI,MAAM;IAIzB,eAAe,IAAI,OAAO;IAIpB,eAAe,CACnB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,kBAAkB,EAC9B,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"openai-responses.d.ts","sourceRoot":"","sources":["../../../../src/services/ai/providers/openai-responses.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAuB,KAAK,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAsBvF,qBAAa,uBAAwB,SAAQ,cAAc;IACzD,OAAO,CAAC,gBAAgB,CAAmB;gBAE/B,MAAM,EAAE,GAAG,EAAE,gBAAgB,EAAE,gBAAgB;IAK3D,eAAe,IAAI,MAAM;IAIzB,eAAe,IAAI,OAAO;IAIpB,eAAe,CACnB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,kBAAkB,EAC9B,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,cAAc,CAAC;IAsH1B,OAAO,CAAC,eAAe;IA+BvB,OAAO,CAAC,gBAAgB;IAgBxB,OAAO,CAAC,gBAAgB;CAsBzB"}
|
|
@@ -57,6 +57,8 @@ export class OpenAIResponsesProvider extends BaseAIProvider {
|
|
|
57
57
|
if (!response.ok) {
|
|
58
58
|
const errorText = await response.text().catch(() => response.statusText);
|
|
59
59
|
log("OpenAI Responses API error", {
|
|
60
|
+
provider: this.getProviderName(),
|
|
61
|
+
model: this.config.model,
|
|
60
62
|
status: response.status,
|
|
61
63
|
error: errorText,
|
|
62
64
|
iteration: iterations,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-handlers.d.ts","sourceRoot":"","sources":["../../src/services/api-handlers.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGpD,UAAU,WAAW,CAAC,CAAC,GAAG,GAAG;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,MAAM;IACd,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,UAAU,OAAO;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,iBAAiB,CAAC,CAAC;IAC3B,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAmDD,wBAAsB,cAAc,IAAI,OAAO,CAAC,WAAW,CAAC;IAAE,OAAO,EAAE,OAAO,EAAE,CAAA;CAAE,CAAC,CAAC,CAiCnF;AAED,wBAAsB,kBAAkB,CACtC,GAAG,CAAC,EAAE,MAAM,EACZ,IAAI,GAAE,MAAU,EAChB,QAAQ,GAAE,MAAW,EACrB,cAAc,GAAE,OAAc,GAC7B,OAAO,CAAC,WAAW,CAAC,iBAAiB,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAsIvD;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC,WAAW,CAAC;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAiDvC;AAED,wBAAsB,kBAAkB,CACtC,EAAE,EAAE,MAAM,EACV,OAAO,GAAE,OAAe,GACvB,OAAO,CAAC,WAAW,CAAC;IAAE,aAAa,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC,CA0BlD;AAED,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,MAAM,EAAE,EACb,OAAO,GAAE,OAAe,GACvB,OAAO,CAAC,WAAW,CAAC;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAa3C;AAED,wBAAsB,kBAAkB,CACtC,EAAE,EAAE,MAAM,EACV,IAAI,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,UAAU,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GAC7D,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAuD5B;AAED,UAAU,eAAe;IACvB,IAAI,EAAE,QAAQ,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,UAAU,eAAe;IACvB,IAAI,EAAE,QAAQ,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,KAAK,gBAAgB,GAAG,eAAe,GAAG,eAAe,CAAC;AAE1D,wBAAsB,YAAY,CAChC,KAAK,EAAE,MAAM,EACb,GAAG,CAAC,EAAE,MAAM,EACZ,IAAI,GAAE,MAAU,EAChB,QAAQ,GAAE,MAAW,GACpB,OAAO,CAAC,WAAW,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC,CAAC,CA6J3D;AAED,wBAAsB,WAAW,IAAI,OAAO,CAC1C,WAAW,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC,CAAC,CACH,CA4BA;AAED,wBAAsB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAiB5E;AAED,wBAAsB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAiB9E;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAC/C,WAAW,CAAC;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC,CAC/E,CASA;AAED,wBAAsB,sBAAsB,IAAI,OAAO,CACrD,WAAW,CAAC;IAAE,sBAAsB,EAAE,MAAM,CAAC;IAAC,mBAAmB,EAAE,GAAG,EAAE,CAAA;CAAE,CAAC,CAC5E,CASA;AAED,wBAAsB,qBAAqB,IAAI,OAAO,CACpD,WAAW,CAAC;IACV,cAAc,EAAE,OAAO,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,GAAG,EAAE,CAAC;CACxB,CAAC,CACH,CASA;AAED,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,aAAa,GAAG,UAAU,GAAG,OAAO,CACrF,WAAW,CAAC;IACV,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC,CACH,CASA;AAED,wBAAsB,kBAAkB,CACtC,EAAE,EAAE,MAAM,EACV,OAAO,GAAE,OAAe,GACvB,OAAO,CAAC,WAAW,CAAC;IAAE,aAAa,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC,CAgBlD;AAED,wBAAsB,uBAAuB,CAC3C,GAAG,EAAE,MAAM,EAAE,EACb,OAAO,GAAE,OAAe,GACvB,OAAO,CAAC,WAAW,CAAC;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAa3C;AAED,wBAAsB,oBAAoB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAwCrF;AAED,wBAAsB,yBAAyB,CAC7C,SAAS,EAAE,MAAM,EACjB,KAAK,GAAE,MAAU,GAChB,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAkB7B;AAED,wBAAsB,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAoB7F;AAED,wBAAsB,oBAAoB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAsBrF;AAED,wBAAsB,wBAAwB,IAAI,OAAO,CACvD,WAAW,CAAC;IAAE,cAAc,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CACxD,CAeA;AAED,UAAU,iBAAiB;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAWD,wBAAsB,6BAA6B,IAAI,OAAO,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAE7F;AAED,wBAAsB,0BAA0B,CAC9C,SAAS,GAAE,MAAU,GACpB,OAAO,CAAC,WAAW,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"api-handlers.d.ts","sourceRoot":"","sources":["../../src/services/api-handlers.ts"],"names":[],"mappings":"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"}
|
|
@@ -258,7 +258,7 @@ export async function handleAddMemory(data) {
|
|
|
258
258
|
metadata: JSON.stringify({ source: "api" }),
|
|
259
259
|
};
|
|
260
260
|
const db = connectionManager.getConnection(shard.dbPath);
|
|
261
|
-
vectorSearch.insertVector(db, record, shard);
|
|
261
|
+
await vectorSearch.insertVector(db, record, shard);
|
|
262
262
|
shardManager.incrementVectorCount(shard.id);
|
|
263
263
|
return { success: true, data: { id } };
|
|
264
264
|
}
|
|
@@ -360,7 +360,7 @@ export async function handleUpdateMemory(id, data) {
|
|
|
360
360
|
projectName: existingMemory.project_name,
|
|
361
361
|
gitRepoUrl: existingMemory.git_repo_url,
|
|
362
362
|
};
|
|
363
|
-
vectorSearch.insertVector(db, updatedRecord, foundShard);
|
|
363
|
+
await vectorSearch.insertVector(db, updatedRecord, foundShard);
|
|
364
364
|
shardManager.incrementVectorCount(foundShard.id);
|
|
365
365
|
return { success: true };
|
|
366
366
|
}
|
|
@@ -814,13 +814,11 @@ export async function handleGetTagMigrationProgress() {
|
|
|
814
814
|
export async function handleRunTagMigrationBatch(batchSize = 5) {
|
|
815
815
|
try {
|
|
816
816
|
const { AIProviderFactory } = await import("./ai/ai-provider-factory.js");
|
|
817
|
-
const
|
|
818
|
-
|
|
819
|
-
apiUrl: CONFIG.memoryApiUrl,
|
|
820
|
-
apiKey: CONFIG.memoryApiKey,
|
|
817
|
+
const { buildMemoryProviderConfig } = await import("./ai/provider-config.js");
|
|
818
|
+
const providerConfig = buildMemoryProviderConfig(CONFIG, {
|
|
821
819
|
maxIterations: 1,
|
|
822
820
|
iterationTimeout: 30000,
|
|
823
|
-
};
|
|
821
|
+
});
|
|
824
822
|
const provider = AIProviderFactory.createProvider(CONFIG.memoryProvider, providerConfig);
|
|
825
823
|
const projectShards = shardManager.getAllShards("project", "");
|
|
826
824
|
let batchProcessed = 0;
|
|
@@ -872,12 +870,12 @@ export async function handleRunTagMigrationBatch(batchSize = 5) {
|
|
|
872
870
|
}
|
|
873
871
|
}
|
|
874
872
|
const vector = await embeddingService.embedWithTimeout(m.content);
|
|
873
|
+
const tagsVector = currentTags.length
|
|
874
|
+
? await embeddingService.embedWithTimeout(currentTags.join(", "))
|
|
875
|
+
: undefined;
|
|
875
876
|
const vectorBuffer = new Uint8Array(vector.buffer);
|
|
876
877
|
db.prepare("UPDATE memories SET vector = ?, updated_at = ? WHERE id = ?").run(vectorBuffer, Date.now(), m.id);
|
|
877
|
-
|
|
878
|
-
.getIndexManager()
|
|
879
|
-
.getIndex(shard.scope, shard.scopeHash, shard.shardIndex);
|
|
880
|
-
await index.insert(m.id, vector);
|
|
878
|
+
await vectorSearch.updateVector(db, m.id, vector, shard, tagsVector);
|
|
881
879
|
migrationProgress.processed++;
|
|
882
880
|
batchProcessed++;
|
|
883
881
|
}
|
|
@@ -180,14 +180,9 @@ async function generateSummary(context, sessionID, userPrompt) {
|
|
|
180
180
|
throw new Error("External API not configured for auto-capture");
|
|
181
181
|
}
|
|
182
182
|
const { AIProviderFactory } = await import("./ai/ai-provider-factory.js");
|
|
183
|
+
const { buildMemoryProviderConfig } = await import("./ai/provider-config.js");
|
|
183
184
|
const { detectLanguage, getLanguageName } = await import("./language-detector.js");
|
|
184
|
-
const providerConfig =
|
|
185
|
-
model: CONFIG.memoryModel,
|
|
186
|
-
apiUrl: CONFIG.memoryApiUrl,
|
|
187
|
-
apiKey: CONFIG.memoryApiKey,
|
|
188
|
-
maxIterations: CONFIG.autoCaptureMaxIterations,
|
|
189
|
-
iterationTimeout: CONFIG.autoCaptureIterationTimeout,
|
|
190
|
-
};
|
|
185
|
+
const providerConfig = buildMemoryProviderConfig(CONFIG);
|
|
191
186
|
const provider = AIProviderFactory.createProvider(CONFIG.memoryProvider, providerConfig);
|
|
192
187
|
const targetLang = CONFIG.autoCaptureLanguage === "auto" || !CONFIG.autoCaptureLanguage
|
|
193
188
|
? detectLanguage(userPrompt)
|
|
@@ -61,7 +61,7 @@ export class CleanupService {
|
|
|
61
61
|
if (protectedMemoryIds.has(memory.id)) {
|
|
62
62
|
continue;
|
|
63
63
|
}
|
|
64
|
-
vectorSearch.deleteVector(db, memory.id);
|
|
64
|
+
await vectorSearch.deleteVector(db, memory.id, shard);
|
|
65
65
|
shardManager.decrementVectorCount(shard.id);
|
|
66
66
|
totalDeleted++;
|
|
67
67
|
if (memory.container_tag?.includes("_user_")) {
|
package/dist/services/client.js
CHANGED
|
@@ -128,7 +128,7 @@ export class LocalMemoryClient {
|
|
|
128
128
|
metadata: Object.keys(dynamicMetadata).length > 0 ? JSON.stringify(dynamicMetadata) : undefined,
|
|
129
129
|
};
|
|
130
130
|
const db = connectionManager.getConnection(shard.dbPath);
|
|
131
|
-
vectorSearch.insertVector(db, record, shard);
|
|
131
|
+
await vectorSearch.insertVector(db, record, shard);
|
|
132
132
|
shardManager.incrementVectorCount(shard.id);
|
|
133
133
|
return { success: true, id };
|
|
134
134
|
}
|
|
@@ -36,7 +36,7 @@ export class DeduplicationService {
|
|
|
36
36
|
const toDelete = duplicates.slice(1);
|
|
37
37
|
for (const dup of toDelete) {
|
|
38
38
|
try {
|
|
39
|
-
vectorSearch.deleteVector(db, dup.id);
|
|
39
|
+
await vectorSearch.deleteVector(db, dup.id, shard);
|
|
40
40
|
shardManager.decrementVectorCount(shard.id);
|
|
41
41
|
exactDeleted++;
|
|
42
42
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/services/logger.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/services/logger.ts"],"names":[],"mappings":"AAqDA,wBAAgB,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,QAQlD"}
|
package/dist/services/logger.js
CHANGED
|
@@ -1,41 +1,51 @@
|
|
|
1
1
|
import { appendFileSync, writeFileSync, existsSync, mkdirSync, statSync, renameSync, unlinkSync, } from "fs";
|
|
2
2
|
import { homedir } from "os";
|
|
3
3
|
import { join } from "path";
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
function getLogFilePath() {
|
|
5
|
+
return process.env.OPENCODE_MEM_LOG_FILE || join(homedir(), ".opencode-mem", "opencode-mem.log");
|
|
6
|
+
}
|
|
7
|
+
function getLogDirPath() {
|
|
8
|
+
const logFile = getLogFilePath();
|
|
9
|
+
const lastSlash = Math.max(logFile.lastIndexOf("/"), logFile.lastIndexOf("\\"));
|
|
10
|
+
return lastSlash === -1 ? "." : logFile.slice(0, lastSlash);
|
|
11
|
+
}
|
|
6
12
|
const MAX_LOG_SIZE = 5 * 1024 * 1024;
|
|
7
13
|
const GLOBAL_LOGGER_KEY = Symbol.for("opencode-mem.logger.initialized");
|
|
8
14
|
function rotateLog() {
|
|
15
|
+
const logFile = getLogFilePath();
|
|
9
16
|
try {
|
|
10
|
-
if (!existsSync(
|
|
17
|
+
if (!existsSync(logFile))
|
|
11
18
|
return;
|
|
12
|
-
const stats = statSync(
|
|
19
|
+
const stats = statSync(logFile);
|
|
13
20
|
if (stats.size < MAX_LOG_SIZE)
|
|
14
21
|
return;
|
|
15
|
-
const oldLog =
|
|
22
|
+
const oldLog = logFile + ".old";
|
|
16
23
|
if (existsSync(oldLog))
|
|
17
24
|
unlinkSync(oldLog);
|
|
18
|
-
renameSync(
|
|
25
|
+
renameSync(logFile, oldLog);
|
|
19
26
|
}
|
|
20
27
|
catch { }
|
|
21
28
|
}
|
|
22
29
|
function ensureLoggerInitialized() {
|
|
23
30
|
if (globalThis[GLOBAL_LOGGER_KEY])
|
|
24
31
|
return;
|
|
25
|
-
|
|
26
|
-
|
|
32
|
+
const logDir = getLogDirPath();
|
|
33
|
+
const logFile = getLogFilePath();
|
|
34
|
+
if (!existsSync(logDir)) {
|
|
35
|
+
mkdirSync(logDir, { recursive: true });
|
|
27
36
|
}
|
|
28
37
|
rotateLog();
|
|
29
|
-
writeFileSync(
|
|
38
|
+
writeFileSync(logFile, `\n--- Session started: ${new Date().toISOString()} ---\n`, {
|
|
30
39
|
flag: "a",
|
|
31
40
|
});
|
|
32
41
|
globalThis[GLOBAL_LOGGER_KEY] = true;
|
|
33
42
|
}
|
|
34
43
|
export function log(message, data) {
|
|
35
44
|
ensureLoggerInitialized();
|
|
45
|
+
const logFile = getLogFilePath();
|
|
36
46
|
const timestamp = new Date().toISOString();
|
|
37
47
|
const line = data
|
|
38
48
|
? `[${timestamp}] ${message}: ${JSON.stringify(data)}\n`
|
|
39
49
|
: `[${timestamp}] ${message}\n`;
|
|
40
|
-
appendFileSync(
|
|
50
|
+
appendFileSync(logFile, line);
|
|
41
51
|
}
|
|
@@ -105,7 +105,7 @@ export class MigrationService {
|
|
|
105
105
|
total: mismatch.shardMismatches.length,
|
|
106
106
|
currentShard: String(shardInfo.shardId),
|
|
107
107
|
});
|
|
108
|
-
shardManager.deleteShard(shardInfo.shardId);
|
|
108
|
+
await shardManager.deleteShard(shardInfo.shardId);
|
|
109
109
|
deletedShards++;
|
|
110
110
|
}
|
|
111
111
|
catch (error) {
|
|
@@ -168,7 +168,7 @@ export class MigrationService {
|
|
|
168
168
|
isPinned: memory.is_pinned || 0,
|
|
169
169
|
});
|
|
170
170
|
}
|
|
171
|
-
shardManager.deleteShard(shardInfo.shardId);
|
|
171
|
+
await shardManager.deleteShard(shardInfo.shardId);
|
|
172
172
|
for (const memory of tempMemories) {
|
|
173
173
|
try {
|
|
174
174
|
const vector = await embeddingService.embedWithTimeout(memory.content);
|
|
@@ -176,7 +176,7 @@ export class MigrationService {
|
|
|
176
176
|
const hash = memory.containerTag.split("_").slice(2).join("_");
|
|
177
177
|
const newShard = shardManager.getWriteShard(scope, hash);
|
|
178
178
|
const newDb = connectionManager.getConnection(newShard.dbPath);
|
|
179
|
-
vectorSearch.insertVector(newDb, {
|
|
179
|
+
await vectorSearch.insertVector(newDb, {
|
|
180
180
|
id: memory.id,
|
|
181
181
|
content: memory.content,
|
|
182
182
|
vector,
|
|
@@ -17,7 +17,7 @@ export declare class ShardManager {
|
|
|
17
17
|
incrementVectorCount(shardId: number): void;
|
|
18
18
|
decrementVectorCount(shardId: number): void;
|
|
19
19
|
getShardByPath(dbPath: string): ShardInfo | null;
|
|
20
|
-
deleteShard(shardId: number): void
|
|
20
|
+
deleteShard(shardId: number): Promise<void>;
|
|
21
21
|
}
|
|
22
22
|
export declare const shardManager: ShardManager;
|
|
23
23
|
//# sourceMappingURL=shard-manager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shard-manager.d.ts","sourceRoot":"","sources":["../../../src/services/sqlite/shard-manager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shard-manager.d.ts","sourceRoot":"","sources":["../../../src/services/sqlite/shard-manager.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAO5C,qBAAa,YAAY;IACvB,OAAO,CAAC,UAAU,CAAe;IACjC,OAAO,CAAC,YAAY,CAAS;;IAQ7B,OAAO,CAAC,cAAc;IAqBtB,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,iBAAiB;IAKzB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAsB9E,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE;IAgCvE,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,SAAS;IA2BxF,OAAO,CAAC,WAAW;IA8CnB,OAAO,CAAC,YAAY;IA4BpB,OAAO,CAAC,iBAAiB;IAYzB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS;IA+BtE,OAAO,CAAC,iBAAiB;IAOzB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAO3C,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAO3C,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAkB1C,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAkClD;AAED,eAAO,MAAM,YAAY,cAAqB,CAAC"}
|
|
@@ -4,6 +4,7 @@ import { existsSync } from "node:fs";
|
|
|
4
4
|
import { CONFIG } from "../../config.js";
|
|
5
5
|
import { connectionManager } from "./connection-manager.js";
|
|
6
6
|
import { log } from "../logger.js";
|
|
7
|
+
import { vectorSearch } from "./vector-search.js";
|
|
7
8
|
const Database = getDatabase();
|
|
8
9
|
const METADATA_DB_NAME = "metadata.db";
|
|
9
10
|
export class ShardManager {
|
|
@@ -251,11 +252,21 @@ export class ShardManager {
|
|
|
251
252
|
createdAt: row.created_at,
|
|
252
253
|
};
|
|
253
254
|
}
|
|
254
|
-
deleteShard(shardId) {
|
|
255
|
+
async deleteShard(shardId) {
|
|
255
256
|
const stmt = this.metadataDb.prepare(`SELECT * FROM shards WHERE id = ?`);
|
|
256
257
|
const row = stmt.get(shardId);
|
|
257
258
|
if (row) {
|
|
258
259
|
const fullPath = this.resolveStoredPath(row.db_path, row.scope);
|
|
260
|
+
await vectorSearch.deleteShardIndexes({
|
|
261
|
+
id: row.id,
|
|
262
|
+
scope: row.scope,
|
|
263
|
+
scopeHash: row.scope_hash,
|
|
264
|
+
shardIndex: row.shard_index,
|
|
265
|
+
dbPath: fullPath,
|
|
266
|
+
vectorCount: row.vector_count,
|
|
267
|
+
isActive: row.is_active === 1,
|
|
268
|
+
createdAt: row.created_at,
|
|
269
|
+
});
|
|
259
270
|
connectionManager.closeConnection(fullPath);
|
|
260
271
|
try {
|
|
261
272
|
const fs = require("node:fs");
|
|
@@ -1,9 +1,13 @@
|
|
|
1
|
-
import { HNSWIndexManager } from "./hnsw-index.js";
|
|
2
1
|
import type { MemoryRecord, SearchResult, ShardInfo } from "./types.js";
|
|
2
|
+
import type { VectorBackend } from "../vector-backends/types.js";
|
|
3
3
|
declare const Database: typeof import("bun:sqlite").Database;
|
|
4
4
|
type DatabaseType = typeof Database.prototype;
|
|
5
5
|
export declare class VectorSearch {
|
|
6
|
-
|
|
6
|
+
private readonly backendPromise;
|
|
7
|
+
private readonly fallbackBackend;
|
|
8
|
+
constructor(backend?: VectorBackend, fallbackBackend?: VectorBackend);
|
|
9
|
+
private getBackend;
|
|
10
|
+
insertVector(db: DatabaseType, record: MemoryRecord, shard?: ShardInfo): Promise<void>;
|
|
7
11
|
searchInShard(shard: ShardInfo, queryVector: Float32Array, containerTag: string, limit: number, queryText?: string): Promise<SearchResult[]>;
|
|
8
12
|
searchAcrossShards(shards: ShardInfo[], queryVector: Float32Array, containerTag: string, limit: number, similarityThreshold: number, queryText?: string): Promise<SearchResult[]>;
|
|
9
13
|
deleteVector(db: DatabaseType, memoryId: string, shard?: ShardInfo): Promise<void>;
|
|
@@ -17,8 +21,8 @@ export declare class VectorSearch {
|
|
|
17
21
|
getDistinctTags(db: DatabaseType): any[];
|
|
18
22
|
pinMemory(db: DatabaseType, memoryId: string): void;
|
|
19
23
|
unpinMemory(db: DatabaseType, memoryId: string): void;
|
|
20
|
-
|
|
21
|
-
|
|
24
|
+
rebuildIndexForShard(db: DatabaseType, scope: string, scopeHash: string, shardIndex: number): Promise<void>;
|
|
25
|
+
deleteShardIndexes(shard: ShardInfo): Promise<void>;
|
|
22
26
|
}
|
|
23
27
|
export declare const vectorSearch: VectorSearch;
|
|
24
28
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vector-search.d.ts","sourceRoot":"","sources":["../../../src/services/sqlite/vector-search.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"vector-search.d.ts","sourceRoot":"","sources":["../../../src/services/sqlite/vector-search.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGxE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAEjE,QAAA,MAAM,QAAQ,sCAAgB,CAAC;AAC/B,KAAK,YAAY,GAAG,OAAO,QAAQ,CAAC,SAAS,CAAC;AAM9C,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAyB;IACxD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAgB;gBAEpC,OAAO,CAAC,EAAE,aAAa,EAAE,eAAe,GAAE,aAAsC;YAO9E,UAAU;IAIlB,YAAY,CAAC,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAyCtF,aAAa,CACjB,KAAK,EAAE,SAAS,EAChB,WAAW,EAAE,YAAY,EACzB,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,EACb,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,YAAY,EAAE,CAAC;IAyHpB,kBAAkB,CACtB,MAAM,EAAE,SAAS,EAAE,EACnB,WAAW,EAAE,YAAY,EACzB,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,EACb,mBAAmB,EAAE,MAAM,EAC3B,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,YAAY,EAAE,CAAC;IAiBpB,YAAY,CAAC,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAUlF,YAAY,CAChB,EAAE,EAAE,YAAY,EAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,YAAY,EACpB,KAAK,CAAC,EAAE,SAAS,EACjB,UAAU,CAAC,EAAE,YAAY,GACxB,OAAO,CAAC,IAAI,CAAC;IAkBhB,YAAY,CAAC,EAAE,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,GAAG,EAAE;IAW1E,cAAc,CAAC,EAAE,EAAE,YAAY,GAAG,GAAG,EAAE;IAKvC,aAAa,CAAC,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI;IAK7D,sBAAsB,CAAC,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,GAAG,GAAG,EAAE;IAgBlE,YAAY,CAAC,EAAE,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM;IAM5D,eAAe,CAAC,EAAE,EAAE,YAAY,GAAG,MAAM;IAMzC,eAAe,CAAC,EAAE,EAAE,YAAY,GAAG,GAAG,EAAE;IAexC,SAAS,CAAC,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAKnD,WAAW,CAAC,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAK/C,oBAAoB,CACxB,EAAE,EAAE,YAAY,EAChB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC;IAgBV,kBAAkB,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;CAI1D;AAED,eAAO,MAAM,YAAY,cAAqB,CAAC"}
|