gitmem-mcp 1.0.0 → 1.0.1
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/CLAUDE.md.template +63 -55
- package/README.md +60 -29
- package/bin/gitmem.js +233 -109
- package/bin/init-wizard.js +642 -0
- package/bin/uninstall.js +288 -0
- package/dist/commands/check.js +20 -20
- package/dist/commands/check.js.map +1 -1
- package/dist/constants/closing-questions.d.ts +6 -0
- package/dist/constants/closing-questions.d.ts.map +1 -1
- package/dist/constants/closing-questions.js +65 -0
- package/dist/constants/closing-questions.js.map +1 -1
- package/dist/hooks/format-utils.d.ts +52 -0
- package/dist/hooks/format-utils.d.ts.map +1 -0
- package/dist/hooks/format-utils.js +89 -0
- package/dist/hooks/format-utils.js.map +1 -0
- package/dist/hooks/quick-retrieve.d.ts +30 -0
- package/dist/hooks/quick-retrieve.d.ts.map +1 -0
- package/dist/hooks/quick-retrieve.js +149 -0
- package/dist/hooks/quick-retrieve.js.map +1 -0
- package/dist/index.js +0 -0
- package/dist/schemas/active-sessions.d.ts +8 -8
- package/dist/schemas/analyze.d.ts +3 -3
- package/dist/schemas/common.d.ts +2 -2
- package/dist/schemas/common.d.ts.map +1 -1
- package/dist/schemas/common.js +1 -1
- package/dist/schemas/common.js.map +1 -1
- package/dist/schemas/create-decision.d.ts +3 -3
- package/dist/schemas/create-learning.d.ts +13 -13
- package/dist/schemas/log.d.ts +3 -3
- package/dist/schemas/prepare-context.d.ts +3 -3
- package/dist/schemas/recall.d.ts +3 -3
- package/dist/schemas/record-scar-usage-batch.d.ts +8 -3
- package/dist/schemas/record-scar-usage-batch.d.ts.map +1 -1
- package/dist/schemas/record-scar-usage.d.ts +3 -0
- package/dist/schemas/record-scar-usage.d.ts.map +1 -1
- package/dist/schemas/record-scar-usage.js +1 -0
- package/dist/schemas/record-scar-usage.js.map +1 -1
- package/dist/schemas/registry.d.ts +18 -0
- package/dist/schemas/registry.d.ts.map +1 -0
- package/dist/schemas/registry.js +158 -0
- package/dist/schemas/registry.js.map +1 -0
- package/dist/schemas/save-transcript.d.ts +3 -3
- package/dist/schemas/search-transcripts.d.ts +33 -0
- package/dist/schemas/search-transcripts.d.ts.map +1 -0
- package/dist/schemas/search-transcripts.js +26 -0
- package/dist/schemas/search-transcripts.js.map +1 -0
- package/dist/schemas/search.d.ts +3 -3
- package/dist/schemas/session-close.d.ts +43 -15
- package/dist/schemas/session-close.d.ts.map +1 -1
- package/dist/schemas/session-close.js +7 -2
- package/dist/schemas/session-close.js.map +1 -1
- package/dist/schemas/session-start.d.ts +3 -3
- package/dist/schemas/thread.d.ts +3 -3
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +82 -28
- package/dist/server.js.map +1 -1
- package/dist/services/active-sessions.d.ts +2 -1
- package/dist/services/active-sessions.d.ts.map +1 -1
- package/dist/services/active-sessions.js +130 -84
- package/dist/services/active-sessions.js.map +1 -1
- package/dist/services/analytics.d.ts.map +1 -1
- package/dist/services/analytics.js +1 -0
- package/dist/services/analytics.js.map +1 -1
- package/dist/services/behavioral-decay.d.ts +40 -0
- package/dist/services/behavioral-decay.d.ts.map +1 -0
- package/dist/services/behavioral-decay.js +110 -0
- package/dist/services/behavioral-decay.js.map +1 -0
- package/dist/services/bm25.d.ts +39 -0
- package/dist/services/bm25.d.ts.map +1 -0
- package/dist/services/bm25.js +132 -0
- package/dist/services/bm25.js.map +1 -0
- package/dist/services/cache.d.ts.map +1 -1
- package/dist/services/cache.js +9 -8
- package/dist/services/cache.js.map +1 -1
- package/dist/services/cache.test.js +17 -17
- package/dist/services/cache.test.js.map +1 -1
- package/dist/services/compliance-validator.d.ts.map +1 -1
- package/dist/services/compliance-validator.js +12 -1
- package/dist/services/compliance-validator.js.map +1 -1
- package/dist/services/display-protocol.d.ts +31 -0
- package/dist/services/display-protocol.d.ts.map +1 -0
- package/dist/services/display-protocol.js +73 -0
- package/dist/services/display-protocol.js.map +1 -0
- package/dist/services/effect-tracker.d.ts +81 -0
- package/dist/services/effect-tracker.d.ts.map +1 -0
- package/dist/services/effect-tracker.js +181 -0
- package/dist/services/effect-tracker.js.map +1 -0
- package/dist/services/file-lock.d.ts +31 -0
- package/dist/services/file-lock.d.ts.map +1 -0
- package/dist/services/file-lock.js +124 -0
- package/dist/services/file-lock.js.map +1 -0
- package/dist/services/gitmem-dir.d.ts +7 -0
- package/dist/services/gitmem-dir.d.ts.map +1 -1
- package/dist/services/gitmem-dir.js +21 -0
- package/dist/services/gitmem-dir.js.map +1 -1
- package/dist/services/local-file-storage.d.ts +3 -2
- package/dist/services/local-file-storage.d.ts.map +1 -1
- package/dist/services/local-file-storage.js +30 -43
- package/dist/services/local-file-storage.js.map +1 -1
- package/dist/services/local-vector-search.d.ts +10 -9
- package/dist/services/local-vector-search.d.ts.map +1 -1
- package/dist/services/local-vector-search.js +28 -23
- package/dist/services/local-vector-search.js.map +1 -1
- package/dist/services/metrics.d.ts +7 -2
- package/dist/services/metrics.d.ts.map +1 -1
- package/dist/services/metrics.js +41 -33
- package/dist/services/metrics.js.map +1 -1
- package/dist/services/session-state.d.ts +8 -0
- package/dist/services/session-state.d.ts.map +1 -1
- package/dist/services/session-state.js +9 -2
- package/dist/services/session-state.js.map +1 -1
- package/dist/services/startup.d.ts +12 -13
- package/dist/services/startup.d.ts.map +1 -1
- package/dist/services/startup.js +104 -57
- package/dist/services/startup.js.map +1 -1
- package/dist/services/supabase-client.d.ts +2 -1
- package/dist/services/supabase-client.d.ts.map +1 -1
- package/dist/services/supabase-client.js +22 -16
- package/dist/services/supabase-client.js.map +1 -1
- package/dist/services/thread-dedup.d.ts +9 -0
- package/dist/services/thread-dedup.d.ts.map +1 -1
- package/dist/services/thread-dedup.js +27 -0
- package/dist/services/thread-dedup.js.map +1 -1
- package/dist/services/thread-manager.d.ts.map +1 -1
- package/dist/services/thread-manager.js +38 -16
- package/dist/services/thread-manager.js.map +1 -1
- package/dist/services/thread-suggestions.d.ts.map +1 -1
- package/dist/services/thread-suggestions.js +1 -1
- package/dist/services/thread-suggestions.js.map +1 -1
- package/dist/services/thread-supabase.d.ts +0 -1
- package/dist/services/thread-supabase.d.ts.map +1 -1
- package/dist/services/thread-supabase.js +83 -54
- package/dist/services/thread-supabase.js.map +1 -1
- package/dist/services/timezone.d.ts.map +1 -1
- package/dist/services/timezone.js +1 -0
- package/dist/services/timezone.js.map +1 -1
- package/dist/services/transcript-chunker.d.ts.map +1 -1
- package/dist/services/transcript-chunker.js +18 -4
- package/dist/services/transcript-chunker.js.map +1 -1
- package/dist/services/variant-generation.d.ts +41 -0
- package/dist/services/variant-generation.d.ts.map +1 -0
- package/dist/services/variant-generation.js +263 -0
- package/dist/services/variant-generation.js.map +1 -0
- package/dist/tools/absorb-observations.d.ts.map +1 -1
- package/dist/tools/absorb-observations.js +9 -0
- package/dist/tools/absorb-observations.js.map +1 -1
- package/dist/tools/analyze.d.ts.map +1 -1
- package/dist/tools/analyze.js +13 -2
- package/dist/tools/analyze.js.map +1 -1
- package/dist/tools/archive-learning.d.ts +28 -0
- package/dist/tools/archive-learning.d.ts.map +1 -0
- package/dist/tools/archive-learning.js +81 -0
- package/dist/tools/archive-learning.js.map +1 -0
- package/dist/tools/cleanup-threads.d.ts +1 -0
- package/dist/tools/cleanup-threads.d.ts.map +1 -1
- package/dist/tools/cleanup-threads.js +111 -18
- package/dist/tools/cleanup-threads.js.map +1 -1
- package/dist/tools/confirm-scars.d.ts.map +1 -1
- package/dist/tools/confirm-scars.js +8 -2
- package/dist/tools/confirm-scars.js.map +1 -1
- package/dist/tools/create-decision.d.ts.map +1 -1
- package/dist/tools/create-decision.js +11 -8
- package/dist/tools/create-decision.js.map +1 -1
- package/dist/tools/create-learning.d.ts.map +1 -1
- package/dist/tools/create-learning.js +35 -11
- package/dist/tools/create-learning.js.map +1 -1
- package/dist/tools/create-linear-issue.d.ts +18 -0
- package/dist/tools/create-linear-issue.d.ts.map +1 -0
- package/dist/tools/create-linear-issue.js +197 -0
- package/dist/tools/create-linear-issue.js.map +1 -0
- package/dist/tools/create-thread.d.ts +2 -1
- package/dist/tools/create-thread.d.ts.map +1 -1
- package/dist/tools/create-thread.js +9 -4
- package/dist/tools/create-thread.js.map +1 -1
- package/dist/tools/definitions.d.ts +785 -34
- package/dist/tools/definitions.d.ts.map +1 -1
- package/dist/tools/definitions.js +239 -95
- package/dist/tools/definitions.js.map +1 -1
- package/dist/tools/dismiss-suggestion.d.ts +1 -0
- package/dist/tools/dismiss-suggestion.d.ts.map +1 -1
- package/dist/tools/dismiss-suggestion.js +4 -0
- package/dist/tools/dismiss-suggestion.js.map +1 -1
- package/dist/tools/graph-traverse.d.ts +1 -0
- package/dist/tools/graph-traverse.d.ts.map +1 -1
- package/dist/tools/graph-traverse.js +24 -9
- package/dist/tools/graph-traverse.js.map +1 -1
- package/dist/tools/list-threads.d.ts.map +1 -1
- package/dist/tools/list-threads.js +49 -5
- package/dist/tools/list-threads.js.map +1 -1
- package/dist/tools/log.d.ts +1 -0
- package/dist/tools/log.d.ts.map +1 -1
- package/dist/tools/log.js +84 -17
- package/dist/tools/log.js.map +1 -1
- package/dist/tools/prepare-context.d.ts +1 -0
- package/dist/tools/prepare-context.d.ts.map +1 -1
- package/dist/tools/prepare-context.js +15 -85
- package/dist/tools/prepare-context.js.map +1 -1
- package/dist/tools/promote-suggestion.d.ts +1 -0
- package/dist/tools/promote-suggestion.d.ts.map +1 -1
- package/dist/tools/promote-suggestion.js +5 -0
- package/dist/tools/promote-suggestion.js.map +1 -1
- package/dist/tools/recall.d.ts +2 -0
- package/dist/tools/recall.d.ts.map +1 -1
- package/dist/tools/recall.js +43 -10
- package/dist/tools/recall.js.map +1 -1
- package/dist/tools/recall.test.js +6 -6
- package/dist/tools/recall.test.js.map +1 -1
- package/dist/tools/record-scar-usage-batch.d.ts.map +1 -1
- package/dist/tools/record-scar-usage-batch.js +13 -0
- package/dist/tools/record-scar-usage-batch.js.map +1 -1
- package/dist/tools/record-scar-usage.d.ts.map +1 -1
- package/dist/tools/record-scar-usage.js +6 -0
- package/dist/tools/record-scar-usage.js.map +1 -1
- package/dist/tools/resolve-thread.d.ts.map +1 -1
- package/dist/tools/resolve-thread.js +57 -6
- package/dist/tools/resolve-thread.js.map +1 -1
- package/dist/tools/save-transcript.d.ts +1 -0
- package/dist/tools/save-transcript.d.ts.map +1 -1
- package/dist/tools/save-transcript.js +3 -1
- package/dist/tools/save-transcript.js.map +1 -1
- package/dist/tools/search-transcripts.d.ts +44 -0
- package/dist/tools/search-transcripts.d.ts.map +1 -0
- package/dist/tools/search-transcripts.js +158 -0
- package/dist/tools/search-transcripts.js.map +1 -0
- package/dist/tools/search.d.ts +1 -0
- package/dist/tools/search.d.ts.map +1 -1
- package/dist/tools/search.js +74 -3
- package/dist/tools/search.js.map +1 -1
- package/dist/tools/session-close.d.ts.map +1 -1
- package/dist/tools/session-close.js +563 -326
- package/dist/tools/session-close.js.map +1 -1
- package/dist/tools/session-start.d.ts +10 -6
- package/dist/tools/session-start.d.ts.map +1 -1
- package/dist/tools/session-start.js +317 -426
- package/dist/tools/session-start.js.map +1 -1
- package/dist/types/index.d.ts +37 -4
- package/dist/types/index.d.ts.map +1 -1
- package/hooks/hooks/hooks.json +8 -37
- package/hooks/scripts/auto-retrieve-hook.sh +163 -0
- package/hooks/scripts/post-tool-use.sh +0 -16
- package/hooks/scripts/recall-check.sh +0 -11
- package/hooks/scripts/session-close-check.sh +1 -1
- package/hooks/scripts/session-start.sh +89 -13
- package/hooks/tests/test-hooks.sh +3 -49
- package/package.json +3 -2
- package/schema/setup.sql +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"effect-tracker.js","sourceRoot":"","sources":["../../src/services/effect-tracker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Advisory File Lock (GIT-24)
|
|
3
|
+
*
|
|
4
|
+
* Uses O_CREAT | O_EXCL for atomic lock file creation — the standard
|
|
5
|
+
* POSIX advisory lock pattern. Zero dependencies.
|
|
6
|
+
*
|
|
7
|
+
* Lock file: .gitmem/active-sessions.lock
|
|
8
|
+
*
|
|
9
|
+
* Stale lock detection: if a lock file is older than STALE_THRESHOLD_MS,
|
|
10
|
+
* the holder likely crashed. We break the stale lock and retry.
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Acquire an advisory file lock synchronously.
|
|
14
|
+
*
|
|
15
|
+
* Uses O_CREAT | O_EXCL to atomically create the lock file.
|
|
16
|
+
* Retries with sleep until timeout. Breaks stale locks.
|
|
17
|
+
*
|
|
18
|
+
* @throws Error if lock cannot be acquired within timeout
|
|
19
|
+
*/
|
|
20
|
+
export declare function acquireLockSync(lockPath: string, timeoutMs?: number, retryMs?: number): void;
|
|
21
|
+
/**
|
|
22
|
+
* Release an advisory file lock synchronously.
|
|
23
|
+
* Ignores ENOENT (lock already released).
|
|
24
|
+
*/
|
|
25
|
+
export declare function releaseLockSync(lockPath: string): void;
|
|
26
|
+
/**
|
|
27
|
+
* Execute a function while holding an advisory file lock.
|
|
28
|
+
* Guarantees lock release even if fn throws.
|
|
29
|
+
*/
|
|
30
|
+
export declare function withLockSync<T>(lockPath: string, fn: () => T): T;
|
|
31
|
+
//# sourceMappingURL=file-lock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-lock.d.ts","sourceRoot":"","sources":["../../src/services/file-lock.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAwCH;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,SAAS,GAAE,MAA2B,EACtC,OAAO,GAAE,MAAyB,GACjC,IAAI,CAiDN;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAStD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAOhE"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Advisory File Lock (GIT-24)
|
|
3
|
+
*
|
|
4
|
+
* Uses O_CREAT | O_EXCL for atomic lock file creation — the standard
|
|
5
|
+
* POSIX advisory lock pattern. Zero dependencies.
|
|
6
|
+
*
|
|
7
|
+
* Lock file: .gitmem/active-sessions.lock
|
|
8
|
+
*
|
|
9
|
+
* Stale lock detection: if a lock file is older than STALE_THRESHOLD_MS,
|
|
10
|
+
* the holder likely crashed. We break the stale lock and retry.
|
|
11
|
+
*/
|
|
12
|
+
import * as fs from "fs";
|
|
13
|
+
import * as os from "os";
|
|
14
|
+
const STALE_THRESHOLD_MS = 30_000; // 30 seconds — critical section takes <10ms
|
|
15
|
+
const DEFAULT_TIMEOUT_MS = 5_000;
|
|
16
|
+
const DEFAULT_RETRY_MS = 25;
|
|
17
|
+
/**
|
|
18
|
+
* Synchronous sleep using Atomics.wait on a SharedArrayBuffer.
|
|
19
|
+
* More precise than busy-wait, doesn't block the event loop for other threads.
|
|
20
|
+
*/
|
|
21
|
+
function sleepSync(ms) {
|
|
22
|
+
const buf = new SharedArrayBuffer(4);
|
|
23
|
+
const arr = new Int32Array(buf);
|
|
24
|
+
Atomics.wait(arr, 0, 0, ms);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Check if a lock file is stale (holder likely crashed).
|
|
28
|
+
*/
|
|
29
|
+
function isLockStale(lockPath) {
|
|
30
|
+
try {
|
|
31
|
+
const raw = fs.readFileSync(lockPath, "utf-8");
|
|
32
|
+
const contents = JSON.parse(raw);
|
|
33
|
+
const age = Date.now() - new Date(contents.acquired_at).getTime();
|
|
34
|
+
return age > STALE_THRESHOLD_MS;
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
// Can't read/parse lock — treat as stale so we can recover
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Acquire an advisory file lock synchronously.
|
|
43
|
+
*
|
|
44
|
+
* Uses O_CREAT | O_EXCL to atomically create the lock file.
|
|
45
|
+
* Retries with sleep until timeout. Breaks stale locks.
|
|
46
|
+
*
|
|
47
|
+
* @throws Error if lock cannot be acquired within timeout
|
|
48
|
+
*/
|
|
49
|
+
export function acquireLockSync(lockPath, timeoutMs = DEFAULT_TIMEOUT_MS, retryMs = DEFAULT_RETRY_MS) {
|
|
50
|
+
const deadline = Date.now() + timeoutMs;
|
|
51
|
+
while (true) {
|
|
52
|
+
try {
|
|
53
|
+
// O_CREAT | O_EXCL | O_WRONLY — fails with EEXIST if file exists
|
|
54
|
+
const fd = fs.openSync(lockPath, fs.constants.O_CREAT | fs.constants.O_EXCL | fs.constants.O_WRONLY);
|
|
55
|
+
const contents = {
|
|
56
|
+
pid: process.pid,
|
|
57
|
+
hostname: os.hostname(),
|
|
58
|
+
acquired_at: new Date().toISOString(),
|
|
59
|
+
};
|
|
60
|
+
fs.writeSync(fd, JSON.stringify(contents));
|
|
61
|
+
fs.closeSync(fd);
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
catch (err) {
|
|
65
|
+
const error = err;
|
|
66
|
+
if (error.code !== "EEXIST") {
|
|
67
|
+
throw new Error(`[file-lock] Failed to create lock file ${lockPath}: ${error.message}`);
|
|
68
|
+
}
|
|
69
|
+
// Lock file exists — check if stale
|
|
70
|
+
if (isLockStale(lockPath)) {
|
|
71
|
+
try {
|
|
72
|
+
fs.unlinkSync(lockPath);
|
|
73
|
+
// Loop back to retry immediately after breaking stale lock
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
// Another process may have broken it first — retry
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
// Check timeout
|
|
81
|
+
if (Date.now() >= deadline) {
|
|
82
|
+
let diagnostics = "";
|
|
83
|
+
try {
|
|
84
|
+
const raw = fs.readFileSync(lockPath, "utf-8");
|
|
85
|
+
diagnostics = ` Lock held by: ${raw}`;
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
diagnostics = " (lock file unreadable)";
|
|
89
|
+
}
|
|
90
|
+
throw new Error(`[file-lock] Timeout after ${timeoutMs}ms waiting for lock ${lockPath}.${diagnostics}`);
|
|
91
|
+
}
|
|
92
|
+
sleepSync(retryMs);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Release an advisory file lock synchronously.
|
|
98
|
+
* Ignores ENOENT (lock already released).
|
|
99
|
+
*/
|
|
100
|
+
export function releaseLockSync(lockPath) {
|
|
101
|
+
try {
|
|
102
|
+
fs.unlinkSync(lockPath);
|
|
103
|
+
}
|
|
104
|
+
catch (err) {
|
|
105
|
+
const error = err;
|
|
106
|
+
if (error.code !== "ENOENT") {
|
|
107
|
+
console.warn(`[file-lock] Failed to release lock ${lockPath}: ${error.message}`);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Execute a function while holding an advisory file lock.
|
|
113
|
+
* Guarantees lock release even if fn throws.
|
|
114
|
+
*/
|
|
115
|
+
export function withLockSync(lockPath, fn) {
|
|
116
|
+
acquireLockSync(lockPath);
|
|
117
|
+
try {
|
|
118
|
+
return fn();
|
|
119
|
+
}
|
|
120
|
+
finally {
|
|
121
|
+
releaseLockSync(lockPath);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=file-lock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-lock.js","sourceRoot":"","sources":["../../src/services/file-lock.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,6 +31,13 @@ export declare function getSessionDir(sessionId: string): string;
|
|
|
31
31
|
* Get a file path within a per-session directory.
|
|
32
32
|
*/
|
|
33
33
|
export declare function getSessionPath(sessionId: string, filename: string): string;
|
|
34
|
+
/**
|
|
35
|
+
* Read the "project" field from .gitmem/config.json.
|
|
36
|
+
* Returns null if the file doesn't exist or has no project field.
|
|
37
|
+
*
|
|
38
|
+
* Precedence (handled by callers): explicit param > config.json > "default"
|
|
39
|
+
*/
|
|
40
|
+
export declare function getConfigProject(): string | null;
|
|
34
41
|
/**
|
|
35
42
|
* Clear the cached path (for testing)
|
|
36
43
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gitmem-dir.d.ts","sourceRoot":"","sources":["../../src/services/gitmem-dir.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAOH;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAG9C;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,CA6BrC;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAOvD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C"}
|
|
1
|
+
{"version":3,"file":"gitmem-dir.d.ts","sourceRoot":"","sources":["../../src/services/gitmem-dir.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAOH;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAG9C;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,CA6BrC;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAOvD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,IAAI,CAahD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C"}
|
|
@@ -75,6 +75,27 @@ export function getSessionDir(sessionId) {
|
|
|
75
75
|
export function getSessionPath(sessionId, filename) {
|
|
76
76
|
return path.join(getSessionDir(sessionId), filename);
|
|
77
77
|
}
|
|
78
|
+
/**
|
|
79
|
+
* Read the "project" field from .gitmem/config.json.
|
|
80
|
+
* Returns null if the file doesn't exist or has no project field.
|
|
81
|
+
*
|
|
82
|
+
* Precedence (handled by callers): explicit param > config.json > "default"
|
|
83
|
+
*/
|
|
84
|
+
export function getConfigProject() {
|
|
85
|
+
try {
|
|
86
|
+
const configPath = path.join(getGitmemDir(), "config.json");
|
|
87
|
+
if (fs.existsSync(configPath)) {
|
|
88
|
+
const raw = JSON.parse(fs.readFileSync(configPath, "utf-8"));
|
|
89
|
+
if (raw.project && typeof raw.project === "string") {
|
|
90
|
+
return raw.project;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
// File doesn't exist or is invalid — fall through
|
|
96
|
+
}
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
78
99
|
/**
|
|
79
100
|
* Clear the cached path (for testing)
|
|
80
101
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gitmem-dir.js","sourceRoot":"","sources":["../../src/services/gitmem-dir.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAEzB,IAAI,eAAe,GAAkB,IAAI,CAAC;AAE1C;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,eAAe,GAAG,GAAG,CAAC;IACtB,OAAO,CAAC,KAAK,CAAC,qCAAqC,GAAG,EAAE,CAAC,CAAC;AAC5D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY;IAC1B,wCAAwC;IACxC,IAAI,eAAe,IAAI,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACtD,OAAO,eAAe,CAAC;IACzB,CAAC;IAED,6DAA6D;IAC7D,+CAA+C;IAC/C,8DAA8D;IAC9D,2DAA2D;IAC3D,MAAM,SAAS,GAAG,CAAC,sBAAsB,EAAE,aAAa,CAAC,CAAC;IAC1D,IAAI,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IACxB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;IAClC,OAAO,GAAG,KAAK,IAAI,EAAE,CAAC;QACpB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAC5C,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC;gBAClD,eAAe,GAAG,SAAS,CAAC;gBAC5B,OAAO,CAAC,KAAK,CAAC,2CAA2C,QAAQ,MAAM,SAAS,EAAE,CAAC,CAAC;gBACpF,OAAO,SAAS,CAAC;YACnB,CAAC;QACH,CAAC;QACD,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED,0CAA0C;IAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;IACrD,OAAO,CAAC,KAAK,CAAC,qCAAqC,QAAQ,EAAE,CAAC,CAAC;IAC/D,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,QAAgB;IAC5C,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,QAAQ,CAAC,CAAC;AAC7C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,SAAiB;IAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;IACrE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAChC,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/C,OAAO,CAAC,KAAK,CAAC,2CAA2C,WAAW,EAAE,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,SAAiB,EAAE,QAAgB;IAChE,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,CAAC;AACvD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,eAAe,GAAG,IAAI,CAAC;AACzB,CAAC"}
|
|
1
|
+
{"version":3,"file":"gitmem-dir.js","sourceRoot":"","sources":["../../src/services/gitmem-dir.ts"],"names":[],"mappings":"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"}
|
|
@@ -37,9 +37,10 @@ export declare class LocalFileStorage {
|
|
|
37
37
|
*/
|
|
38
38
|
delete(collection: string, id: string): Promise<boolean>;
|
|
39
39
|
/**
|
|
40
|
-
*
|
|
40
|
+
* BM25-ranked search for scars (free tier alternative to semantic search)
|
|
41
41
|
*
|
|
42
|
-
*
|
|
42
|
+
* Field boosts: title (3x), keywords (2x), description (1x)
|
|
43
|
+
* Uses stemming, IDF weighting, and document length normalization.
|
|
43
44
|
*/
|
|
44
45
|
keywordSearch(query: string, k?: number): Promise<RelevantScar[]>;
|
|
45
46
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-file-storage.d.ts","sourceRoot":"","sources":["../../src/services/local-file-storage.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"local-file-storage.d.ts","sourceRoot":"","sources":["../../src/services/local-file-storage.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAKtD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAS;gBAEb,QAAQ,CAAC,EAAE,MAAM;IAK7B,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,eAAe;IAoBvB;;OAEG;IACG,IAAI,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1C,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE;QACP,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;KACX,GACL,OAAO,CAAC,CAAC,EAAE,CAAC;IA8Bf;;OAEG;IACG,GAAG,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACzC,UAAU,EAAE,MAAM,EAClB,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAKpB;;OAEG;IACG,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5C,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,CAAC,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,GACvB,OAAO,CAAC,CAAC,CAAC;IAcb;;OAEG;IACG,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQ9D;;;;;OAKG;IACG,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,SAAI,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAkClE;;OAEG;IACH,gBAAgB,IAAI,MAAM;IAI1B;;OAEG;IACG,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAyB3D;AAKD,wBAAgB,mBAAmB,IAAI,gBAAgB,CAKtD;AAED,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C"}
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import * as fs from "fs";
|
|
10
10
|
import * as path from "path";
|
|
11
|
+
import { bm25Search } from "./bm25.js";
|
|
11
12
|
const MAX_FILE_SIZE = 10 * 1024 * 1024; // 10MB
|
|
12
13
|
const WARN_FILE_SIZE = 1 * 1024 * 1024; // 1MB
|
|
13
14
|
export class LocalFileStorage {
|
|
@@ -115,47 +116,42 @@ export class LocalFileStorage {
|
|
|
115
116
|
return true;
|
|
116
117
|
}
|
|
117
118
|
/**
|
|
118
|
-
*
|
|
119
|
+
* BM25-ranked search for scars (free tier alternative to semantic search)
|
|
119
120
|
*
|
|
120
|
-
*
|
|
121
|
+
* Field boosts: title (3x), keywords (2x), description (1x)
|
|
122
|
+
* Uses stemming, IDF weighting, and document length normalization.
|
|
121
123
|
*/
|
|
122
124
|
async keywordSearch(query, k = 5) {
|
|
123
125
|
const learnings = this.readCollection("learnings");
|
|
124
|
-
|
|
125
|
-
if (queryTokens.length === 0)
|
|
126
|
+
if (learnings.length === 0)
|
|
126
127
|
return [];
|
|
127
|
-
|
|
128
|
-
const
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
128
|
+
// Build BM25 documents with field boosting
|
|
129
|
+
const docs = learnings.map((l) => ({
|
|
130
|
+
id: String(l.id),
|
|
131
|
+
fields: [
|
|
132
|
+
{ text: String(l.title || ""), boost: 3 },
|
|
133
|
+
{ text: (l.keywords || []).join(" "), boost: 2 },
|
|
134
|
+
{ text: String(l.description || ""), boost: 1 },
|
|
135
|
+
],
|
|
136
|
+
}));
|
|
137
|
+
const results = bm25Search(query, docs, k);
|
|
138
|
+
// Map back to RelevantScar
|
|
139
|
+
const byId = new Map(learnings.map((l) => [String(l.id), l]));
|
|
140
|
+
return results
|
|
141
|
+
.map((r) => {
|
|
142
|
+
const l = byId.get(r.id);
|
|
143
|
+
if (!l)
|
|
144
|
+
return null;
|
|
141
145
|
return {
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
146
|
+
id: r.id,
|
|
147
|
+
title: String(l.title),
|
|
148
|
+
description: String(l.description),
|
|
149
|
+
severity: String(l.severity || "medium"),
|
|
150
|
+
counter_arguments: l.counter_arguments || [],
|
|
151
|
+
similarity: r.similarity,
|
|
145
152
|
};
|
|
146
|
-
})
|
|
147
|
-
|
|
148
|
-
.filter((s) => s.score > 0)
|
|
149
|
-
.sort((a, b) => b.score - a.score)
|
|
150
|
-
.slice(0, k)
|
|
151
|
-
.map((s) => ({
|
|
152
|
-
id: String(s.learning.id),
|
|
153
|
-
title: String(s.learning.title),
|
|
154
|
-
description: String(s.learning.description),
|
|
155
|
-
severity: String(s.learning.severity || "medium"),
|
|
156
|
-
counter_arguments: s.learning.counter_arguments || [],
|
|
157
|
-
similarity: s.similarity,
|
|
158
|
-
}));
|
|
153
|
+
})
|
|
154
|
+
.filter((r) => r !== null);
|
|
159
155
|
}
|
|
160
156
|
/**
|
|
161
157
|
* Get the count of learnings stored locally
|
|
@@ -190,15 +186,6 @@ export class LocalFileStorage {
|
|
|
190
186
|
}
|
|
191
187
|
}
|
|
192
188
|
}
|
|
193
|
-
/**
|
|
194
|
-
* Tokenize text into words, stripping punctuation
|
|
195
|
-
*/
|
|
196
|
-
function tokenize(text) {
|
|
197
|
-
return text
|
|
198
|
-
.replace(/[^\w\s-]/g, " ")
|
|
199
|
-
.split(/\s+/)
|
|
200
|
-
.filter((t) => t.length > 1);
|
|
201
|
-
}
|
|
202
189
|
// Singleton instance
|
|
203
190
|
let _instance = null;
|
|
204
191
|
export function getLocalFileStorage() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-file-storage.js","sourceRoot":"","sources":["../../src/services/local-file-storage.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"local-file-storage.js","sourceRoot":"","sources":["../../src/services/local-file-storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,6 +23,7 @@ interface ScarRecord {
|
|
|
23
23
|
counter_arguments?: string[];
|
|
24
24
|
project?: string;
|
|
25
25
|
embedding?: number[];
|
|
26
|
+
decay_multiplier?: number;
|
|
26
27
|
why_this_matters?: string;
|
|
27
28
|
action_protocol?: string[];
|
|
28
29
|
self_check_criteria?: string[];
|
|
@@ -98,40 +99,40 @@ export declare class LocalVectorSearch {
|
|
|
98
99
|
getLatestUpdatedAt(): string | null;
|
|
99
100
|
}
|
|
100
101
|
/**
|
|
101
|
-
* Get the LocalVectorSearch instance
|
|
102
|
+
* Get the LocalVectorSearch instance (unified, cross-project)
|
|
102
103
|
*/
|
|
103
|
-
export declare function getLocalVectorSearch(
|
|
104
|
+
export declare function getLocalVectorSearch(_project?: Project): LocalVectorSearch;
|
|
104
105
|
/**
|
|
105
106
|
* Initialize local vector search with scars from Supabase
|
|
106
107
|
*
|
|
107
108
|
* Call this once at startup with pre-fetched scars
|
|
108
109
|
*/
|
|
109
|
-
export declare function initializeLocalSearch(scars: ScarRecord[],
|
|
110
|
+
export declare function initializeLocalSearch(scars: ScarRecord[], _project?: Project, latestUpdatedAt?: string): Promise<void>;
|
|
110
111
|
/**
|
|
111
112
|
* Reinitialize local search (for cache flush/refresh)
|
|
112
113
|
*/
|
|
113
|
-
export declare function reinitializeLocalSearch(scars: ScarRecord[],
|
|
114
|
+
export declare function reinitializeLocalSearch(scars: ScarRecord[], _project?: Project, latestUpdatedAt?: string): Promise<void>;
|
|
114
115
|
/**
|
|
115
116
|
* Search for scars using local vector search
|
|
116
117
|
*
|
|
117
118
|
* Falls back to empty results if not initialized
|
|
118
119
|
*/
|
|
119
|
-
export declare function localScarSearch(query: string, k?: number,
|
|
120
|
+
export declare function localScarSearch(query: string, k?: number, _project?: Project): Promise<RelevantScar[]>;
|
|
120
121
|
/**
|
|
121
122
|
* Check if local search is ready
|
|
122
123
|
*/
|
|
123
|
-
export declare function isLocalSearchReady(
|
|
124
|
+
export declare function isLocalSearchReady(_project?: Project): boolean;
|
|
124
125
|
/**
|
|
125
126
|
* Get cache metadata for a project
|
|
126
127
|
*/
|
|
127
|
-
export declare function getCacheMetadata(
|
|
128
|
+
export declare function getCacheMetadata(_project?: Project): CacheMetadata | null;
|
|
128
129
|
/**
|
|
129
130
|
* Set cache TTL for a project
|
|
130
131
|
*/
|
|
131
|
-
export declare function setCacheTtl(minutes: number,
|
|
132
|
+
export declare function setCacheTtl(minutes: number, _project?: Project): void;
|
|
132
133
|
/**
|
|
133
134
|
* Clear the local search index
|
|
134
135
|
*/
|
|
135
|
-
export declare function clearLocalSearch(
|
|
136
|
+
export declare function clearLocalSearch(_project?: Project): void;
|
|
136
137
|
export {};
|
|
137
138
|
//# sourceMappingURL=local-vector-search.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-vector-search.d.ts","sourceRoot":"","sources":["../../src/services/local-vector-search.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAO/D,UAAU,UAAU;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"local-vector-search.d.ts","sourceRoot":"","sources":["../../src/services/local-vector-search.ts"],"names":[],"mappings":"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"}
|
|
@@ -57,7 +57,7 @@ export class LocalVectorSearch {
|
|
|
57
57
|
loadedAt = null;
|
|
58
58
|
latestUpdatedAt = null;
|
|
59
59
|
staleTtlMinutes = 15;
|
|
60
|
-
constructor(project = "
|
|
60
|
+
constructor(project = "default") {
|
|
61
61
|
this.project = project;
|
|
62
62
|
}
|
|
63
63
|
/**
|
|
@@ -166,10 +166,11 @@ export class LocalVectorSearch {
|
|
|
166
166
|
const startTime = Date.now();
|
|
167
167
|
// Generate query embedding locally
|
|
168
168
|
const queryEmbedding = await this._embed(query);
|
|
169
|
-
// Compute similarities to all scars
|
|
169
|
+
// Compute similarities to all scars, weighted by behavioral decay
|
|
170
170
|
const scored = this.scars.map((indexed) => ({
|
|
171
171
|
scar: indexed.scar,
|
|
172
|
-
similarity: cosineSimilarity(queryEmbedding, indexed.embedding)
|
|
172
|
+
similarity: cosineSimilarity(queryEmbedding, indexed.embedding)
|
|
173
|
+
* (indexed.scar.decay_multiplier ?? 1.0),
|
|
173
174
|
}));
|
|
174
175
|
// Sort by similarity (descending) and take top k
|
|
175
176
|
scored.sort((a, b) => b.similarity - a.similarity);
|
|
@@ -187,6 +188,7 @@ export class LocalVectorSearch {
|
|
|
187
188
|
why_this_matters: scar.why_this_matters,
|
|
188
189
|
action_protocol: scar.action_protocol,
|
|
189
190
|
self_check_criteria: scar.self_check_criteria,
|
|
191
|
+
decay_multiplier: scar.decay_multiplier,
|
|
190
192
|
}));
|
|
191
193
|
const elapsed = Date.now() - startTime;
|
|
192
194
|
console.error(`[local-vector] Search completed in ${elapsed}ms, found ${results.length} results`);
|
|
@@ -242,16 +244,19 @@ export class LocalVectorSearch {
|
|
|
242
244
|
return this.latestUpdatedAt;
|
|
243
245
|
}
|
|
244
246
|
}
|
|
245
|
-
//
|
|
247
|
+
// Unified cache — all scars loaded into single instance regardless of project.
|
|
248
|
+
// At ~400 scars, semantic similarity handles relevance better than project partitioning.
|
|
249
|
+
// Project params kept in signatures for backward compat but ignored for cache lookup.
|
|
250
|
+
const UNIFIED_KEY = "__all__";
|
|
246
251
|
const instances = new Map();
|
|
247
252
|
/**
|
|
248
|
-
* Get the LocalVectorSearch instance
|
|
253
|
+
* Get the LocalVectorSearch instance (unified, cross-project)
|
|
249
254
|
*/
|
|
250
|
-
export function getLocalVectorSearch(
|
|
251
|
-
let instance = instances.get(
|
|
255
|
+
export function getLocalVectorSearch(_project) {
|
|
256
|
+
let instance = instances.get(UNIFIED_KEY);
|
|
252
257
|
if (!instance) {
|
|
253
|
-
instance = new LocalVectorSearch(
|
|
254
|
-
instances.set(
|
|
258
|
+
instance = new LocalVectorSearch(UNIFIED_KEY);
|
|
259
|
+
instances.set(UNIFIED_KEY, instance);
|
|
255
260
|
}
|
|
256
261
|
return instance;
|
|
257
262
|
}
|
|
@@ -260,15 +265,15 @@ export function getLocalVectorSearch(project = "orchestra_dev") {
|
|
|
260
265
|
*
|
|
261
266
|
* Call this once at startup with pre-fetched scars
|
|
262
267
|
*/
|
|
263
|
-
export async function initializeLocalSearch(scars,
|
|
264
|
-
const instance = getLocalVectorSearch(
|
|
268
|
+
export async function initializeLocalSearch(scars, _project, latestUpdatedAt) {
|
|
269
|
+
const instance = getLocalVectorSearch();
|
|
265
270
|
await instance.initialize(scars, latestUpdatedAt);
|
|
266
271
|
}
|
|
267
272
|
/**
|
|
268
273
|
* Reinitialize local search (for cache flush/refresh)
|
|
269
274
|
*/
|
|
270
|
-
export async function reinitializeLocalSearch(scars,
|
|
271
|
-
const instance = getLocalVectorSearch(
|
|
275
|
+
export async function reinitializeLocalSearch(scars, _project, latestUpdatedAt) {
|
|
276
|
+
const instance = getLocalVectorSearch();
|
|
272
277
|
await instance.reinitialize(scars, latestUpdatedAt);
|
|
273
278
|
}
|
|
274
279
|
/**
|
|
@@ -276,36 +281,36 @@ export async function reinitializeLocalSearch(scars, project = "orchestra_dev",
|
|
|
276
281
|
*
|
|
277
282
|
* Falls back to empty results if not initialized
|
|
278
283
|
*/
|
|
279
|
-
export async function localScarSearch(query, k = 5,
|
|
280
|
-
const instance = getLocalVectorSearch(
|
|
284
|
+
export async function localScarSearch(query, k = 5, _project) {
|
|
285
|
+
const instance = getLocalVectorSearch();
|
|
281
286
|
return instance.search(query, k);
|
|
282
287
|
}
|
|
283
288
|
/**
|
|
284
289
|
* Check if local search is ready
|
|
285
290
|
*/
|
|
286
|
-
export function isLocalSearchReady(
|
|
287
|
-
const instance = instances.get(
|
|
291
|
+
export function isLocalSearchReady(_project) {
|
|
292
|
+
const instance = instances.get(UNIFIED_KEY);
|
|
288
293
|
return instance?.isReady() ?? false;
|
|
289
294
|
}
|
|
290
295
|
/**
|
|
291
296
|
* Get cache metadata for a project
|
|
292
297
|
*/
|
|
293
|
-
export function getCacheMetadata(
|
|
294
|
-
const instance = instances.get(
|
|
298
|
+
export function getCacheMetadata(_project) {
|
|
299
|
+
const instance = instances.get(UNIFIED_KEY);
|
|
295
300
|
return instance?.getCacheMetadata() ?? null;
|
|
296
301
|
}
|
|
297
302
|
/**
|
|
298
303
|
* Set cache TTL for a project
|
|
299
304
|
*/
|
|
300
|
-
export function setCacheTtl(minutes,
|
|
301
|
-
const instance = getLocalVectorSearch(
|
|
305
|
+
export function setCacheTtl(minutes, _project) {
|
|
306
|
+
const instance = getLocalVectorSearch();
|
|
302
307
|
instance.setTtlMinutes(minutes);
|
|
303
308
|
}
|
|
304
309
|
/**
|
|
305
310
|
* Clear the local search index
|
|
306
311
|
*/
|
|
307
|
-
export function clearLocalSearch(
|
|
308
|
-
const instance = instances.get(
|
|
312
|
+
export function clearLocalSearch(_project) {
|
|
313
|
+
const instance = instances.get(UNIFIED_KEY);
|
|
309
314
|
instance?.clear();
|
|
310
315
|
}
|
|
311
316
|
//# sourceMappingURL=local-vector-search.js.map
|