@devflow-tools/memory-engine 0.13.3 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/consolidator.d.ts +13 -0
- package/dist/consolidator.d.ts.map +1 -0
- package/dist/consolidator.js +184 -0
- package/dist/consolidator.js.map +1 -0
- package/dist/event-grouper.d.ts +13 -0
- package/dist/event-grouper.d.ts.map +1 -0
- package/dist/event-grouper.js +178 -0
- package/dist/event-grouper.js.map +1 -0
- package/dist/graph-store.d.ts.map +1 -1
- package/dist/graph-store.js +2 -4
- package/dist/graph-store.js.map +1 -1
- package/dist/hybrid-search.d.ts +6 -4
- package/dist/hybrid-search.d.ts.map +1 -1
- package/dist/hybrid-search.js +23 -5
- package/dist/hybrid-search.js.map +1 -1
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/l2-evaluator.d.ts +31 -0
- package/dist/l2-evaluator.d.ts.map +1 -0
- package/dist/l2-evaluator.js +103 -0
- package/dist/l2-evaluator.js.map +1 -0
- package/dist/llm-provider.d.ts +9 -0
- package/dist/llm-provider.d.ts.map +1 -0
- package/dist/llm-provider.js +37 -0
- package/dist/llm-provider.js.map +1 -0
- package/dist/memory-engine.d.ts +27 -4
- package/dist/memory-engine.d.ts.map +1 -1
- package/dist/memory-engine.js +274 -181
- package/dist/memory-engine.js.map +1 -1
- package/dist/memory-gate.d.ts +116 -0
- package/dist/memory-gate.d.ts.map +1 -0
- package/dist/memory-gate.js +385 -0
- package/dist/memory-gate.js.map +1 -0
- package/dist/memory-store.d.ts +234 -32
- package/dist/memory-store.d.ts.map +1 -1
- package/dist/memory-store.js +729 -142
- package/dist/memory-store.js.map +1 -1
- package/dist/project-validator.d.ts +10 -0
- package/dist/project-validator.d.ts.map +1 -0
- package/dist/project-validator.js +36 -0
- package/dist/project-validator.js.map +1 -0
- package/dist/session-summarizer.d.ts +10 -0
- package/dist/session-summarizer.d.ts.map +1 -0
- package/dist/session-summarizer.js +197 -0
- package/dist/session-summarizer.js.map +1 -0
- package/dist/signal-buffer.d.ts +42 -0
- package/dist/signal-buffer.d.ts.map +1 -0
- package/dist/signal-buffer.js +104 -0
- package/dist/signal-buffer.js.map +1 -0
- package/dist/signal-detector.d.ts +39 -0
- package/dist/signal-detector.d.ts.map +1 -0
- package/dist/signal-detector.js +239 -0
- package/dist/signal-detector.js.map +1 -0
- package/package.json +5 -5
package/dist/index.js
CHANGED
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
export { MemoryEngine } from "./memory-engine.js";
|
|
2
2
|
export { MemoryStore } from "./memory-store.js";
|
|
3
|
+
export { MemoryGate } from "./memory-gate.js";
|
|
4
|
+
export { SignalBuffer } from "./signal-buffer.js";
|
|
5
|
+
export { SignalDetector } from "./signal-detector.js";
|
|
6
|
+
export { validateProjectRoot, hasForceInitSentinel, writeForceInitSentinel } from "./project-validator.js";
|
|
3
7
|
export { EmbeddingProvider } from "./embedding-provider.js";
|
|
4
8
|
export { HybridSearch } from "./hybrid-search.js";
|
|
5
9
|
export { GraphStore } from "./graph-store.js";
|
|
10
|
+
export { setLLMClient } from "./llm-provider.js";
|
|
6
11
|
export { extractMemories, extractCandidates, extractFromEvents, setExtractionLLMClient, isExtractionAvailable } from "./extractor.js";
|
|
12
|
+
export { L2Evaluator, getL2Evaluator, setL2LLMClient } from "./l2-evaluator.js";
|
|
13
|
+
export { consolidate } from './consolidator.js';
|
|
7
14
|
export { checkOllama, getOllamaInfoMessage } from "./ollama-checker.js";
|
|
8
15
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACtI,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAE3G,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACtI,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEhF,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { LLMClient } from '@devflow-tools/sdk';
|
|
2
|
+
export interface L2Candidate {
|
|
3
|
+
eventId: string;
|
|
4
|
+
toolName: string;
|
|
5
|
+
command?: string;
|
|
6
|
+
stderr?: string;
|
|
7
|
+
userMessage?: string;
|
|
8
|
+
l1Score: number;
|
|
9
|
+
dialogScore: number;
|
|
10
|
+
cumulativeScore: number;
|
|
11
|
+
}
|
|
12
|
+
export interface L2Decision {
|
|
13
|
+
eventId: string;
|
|
14
|
+
decision: 'keep' | 'discard' | 'merge';
|
|
15
|
+
mergeTargetId?: string;
|
|
16
|
+
category: 'failure_lesson' | 'project_knowledge' | 'procedural' | 'semantic' | 'mcp_correction';
|
|
17
|
+
content: string;
|
|
18
|
+
confidence: number;
|
|
19
|
+
}
|
|
20
|
+
export declare class L2Evaluator {
|
|
21
|
+
private llmClient;
|
|
22
|
+
setLLMClient(client: LLMClient): void;
|
|
23
|
+
get isAvailable(): boolean;
|
|
24
|
+
evaluate(candidates: L2Candidate[], sessionId: string): Promise<L2Decision[]>;
|
|
25
|
+
private callLLM;
|
|
26
|
+
/** Rule-based fallback when LLM is unavailable. */
|
|
27
|
+
private ruleFallback;
|
|
28
|
+
}
|
|
29
|
+
export declare function getL2Evaluator(): L2Evaluator;
|
|
30
|
+
export declare function setL2LLMClient(client: LLMClient): void;
|
|
31
|
+
//# sourceMappingURL=l2-evaluator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"l2-evaluator.d.ts","sourceRoot":"","sources":["../src/l2-evaluator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;IACvC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,gBAAgB,GAAG,mBAAmB,GAAG,YAAY,GAAG,UAAU,GAAG,gBAAgB,CAAC;IAChG,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AA0BD,qBAAa,WAAW;IACtB,OAAO,CAAC,SAAS,CAA0B;IAE3C,YAAY,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI;IAIrC,IAAI,WAAW,IAAI,OAAO,CAEzB;IAEK,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;YAkBrE,OAAO;IA6BrB,mDAAmD;IACnD,OAAO,CAAC,YAAY;CAmBrB;AAKD,wBAAgB,cAAc,IAAI,WAAW,CAG5C;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAEtD"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
const L2_EVALUATION_PROMPT = `You are a memory curator for a developer tool. Evaluate whether each event should be saved as a permanent memory.
|
|
2
|
+
|
|
3
|
+
Judgment dimensions:
|
|
4
|
+
1. Reusability: How likely is this exact scenario to recur? (1-5)
|
|
5
|
+
2. Long-tail value: Would this still be useful 30 days later? (1-5)
|
|
6
|
+
3. Specificity: Is this project-specific knowledge, or generic programming knowledge? (1-5)
|
|
7
|
+
4. Actionability: Can someone act on this memory? (1-5)
|
|
8
|
+
|
|
9
|
+
Decision rules:
|
|
10
|
+
- Reusability >= 4 AND Long-tail >= 4 → keep
|
|
11
|
+
- Specificity >= 3 AND Actionability >= 4 → keep
|
|
12
|
+
- Otherwise → discard
|
|
13
|
+
- If very similar to an existing approved memory → merge (pick the better one)
|
|
14
|
+
|
|
15
|
+
Categories:
|
|
16
|
+
- "failure_lesson": Error patterns and their fixes
|
|
17
|
+
- "project_knowledge": Project-specific config, tooling, or conventions
|
|
18
|
+
- "procedural": Multi-step procedures and workflows
|
|
19
|
+
- "semantic": Facts about the codebase
|
|
20
|
+
- "mcp_correction": Corrections to MCP tool behavior
|
|
21
|
+
|
|
22
|
+
Output ONLY a JSON array, no other text. Each element:
|
|
23
|
+
{"eventId":"...","decision":"keep|discard|merge","mergeTargetId":"...","category":"...","content":"one concise sentence","confidence":0.0-1.0}`;
|
|
24
|
+
export class L2Evaluator {
|
|
25
|
+
llmClient = null;
|
|
26
|
+
setLLMClient(client) {
|
|
27
|
+
this.llmClient = client;
|
|
28
|
+
}
|
|
29
|
+
get isAvailable() {
|
|
30
|
+
return this.llmClient?.isAvailable ?? false;
|
|
31
|
+
}
|
|
32
|
+
async evaluate(candidates, sessionId) {
|
|
33
|
+
if (!this.llmClient?.isAvailable || candidates.length === 0) {
|
|
34
|
+
return this.ruleFallback(candidates);
|
|
35
|
+
}
|
|
36
|
+
try {
|
|
37
|
+
const result = await Promise.race([
|
|
38
|
+
this.callLLM(candidates, sessionId),
|
|
39
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error('L2 evaluation timeout')), 30_000)),
|
|
40
|
+
]);
|
|
41
|
+
return result;
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return this.ruleFallback(candidates);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
async callLLM(candidates, sessionId) {
|
|
48
|
+
const eventsJson = candidates.map(c => ({
|
|
49
|
+
eventId: c.eventId,
|
|
50
|
+
tool: c.toolName,
|
|
51
|
+
command: c.command,
|
|
52
|
+
error: c.stderr?.slice(0, 200),
|
|
53
|
+
userMessage: c.userMessage?.slice(0, 200),
|
|
54
|
+
scores: { l1: c.l1Score, dialog: c.dialogScore },
|
|
55
|
+
}));
|
|
56
|
+
const response = await this.llmClient.chat({
|
|
57
|
+
systemPrompt: L2_EVALUATION_PROMPT,
|
|
58
|
+
messages: [{
|
|
59
|
+
role: 'user',
|
|
60
|
+
content: `Session: ${sessionId}\nEvents to evaluate:\n${JSON.stringify(eventsJson, null, 2)}`,
|
|
61
|
+
}],
|
|
62
|
+
maxTokens: 2048,
|
|
63
|
+
});
|
|
64
|
+
const text = response.content;
|
|
65
|
+
const jsonMatch = text.match(/```(?:json)?\s*([\s\S]*?)```/) ?? [null, text];
|
|
66
|
+
try {
|
|
67
|
+
const decisions = JSON.parse(jsonMatch[1].trim());
|
|
68
|
+
return decisions.filter(d => d.eventId && d.decision);
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
return [];
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/** Rule-based fallback when LLM is unavailable. */
|
|
75
|
+
ruleFallback(candidates) {
|
|
76
|
+
return candidates
|
|
77
|
+
.filter(c => {
|
|
78
|
+
// Keep events with clear error patterns
|
|
79
|
+
const hasError = /error|fail|exception|timeout|refused|denied/i.test([c.stderr, c.command].filter(Boolean).join(' '));
|
|
80
|
+
return hasError && c.cumulativeScore >= 0.4;
|
|
81
|
+
})
|
|
82
|
+
.map(c => ({
|
|
83
|
+
eventId: c.eventId,
|
|
84
|
+
decision: 'keep',
|
|
85
|
+
category: 'failure_lesson',
|
|
86
|
+
content: c.stderr
|
|
87
|
+
? `Error with \`${c.command ?? c.toolName}\`: ${c.stderr.slice(0, 120)}`
|
|
88
|
+
: `Issue with \`${c.command ?? c.toolName}\``,
|
|
89
|
+
confidence: 0.55,
|
|
90
|
+
}));
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/** Singleton — shared across MemoryGate instances in the same process. */
|
|
94
|
+
let instance = null;
|
|
95
|
+
export function getL2Evaluator() {
|
|
96
|
+
if (!instance)
|
|
97
|
+
instance = new L2Evaluator();
|
|
98
|
+
return instance;
|
|
99
|
+
}
|
|
100
|
+
export function setL2LLMClient(client) {
|
|
101
|
+
getL2Evaluator().setLLMClient(client);
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=l2-evaluator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"l2-evaluator.js","sourceRoot":"","sources":["../src/l2-evaluator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { LLMClient } from '@devflow-tools/sdk';
|
|
2
|
+
export interface LLMResponse {
|
|
3
|
+
content: string;
|
|
4
|
+
provider: string;
|
|
5
|
+
latencyMs: number;
|
|
6
|
+
}
|
|
7
|
+
export declare function setLLMClient(client: LLMClient): void;
|
|
8
|
+
export declare function callLLM(systemPrompt: string, userMessage: string): Promise<LLMResponse>;
|
|
9
|
+
//# sourceMappingURL=llm-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-provider.d.ts","sourceRoot":"","sources":["../src/llm-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAID,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAEpD;AAED,wBAAsB,OAAO,CAC3B,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,WAAW,CAAC,CAgCtB"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
let llmClient = null;
|
|
2
|
+
export function setLLMClient(client) {
|
|
3
|
+
llmClient = client;
|
|
4
|
+
}
|
|
5
|
+
export async function callLLM(systemPrompt, userMessage) {
|
|
6
|
+
const start = Date.now();
|
|
7
|
+
if (llmClient?.isAvailable) {
|
|
8
|
+
try {
|
|
9
|
+
const response = await llmClient.chat({
|
|
10
|
+
systemPrompt,
|
|
11
|
+
messages: [{ role: 'user', content: userMessage }],
|
|
12
|
+
maxTokens: 2048,
|
|
13
|
+
});
|
|
14
|
+
console.log('[LLMProvider] Used LLM client', {
|
|
15
|
+
provider: llmClient.name,
|
|
16
|
+
latencyMs: Date.now() - start,
|
|
17
|
+
});
|
|
18
|
+
return {
|
|
19
|
+
content: response.content,
|
|
20
|
+
provider: llmClient.name,
|
|
21
|
+
latencyMs: Date.now() - start,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
catch (err) {
|
|
25
|
+
console.warn('[LLMProvider] LLM client failed, using rule fallback', {
|
|
26
|
+
error: err.message,
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
console.log('[LLMProvider] Using rule fallback (no LLM available)');
|
|
31
|
+
return {
|
|
32
|
+
content: 'No LLM available',
|
|
33
|
+
provider: 'rules',
|
|
34
|
+
latencyMs: Date.now() - start,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=llm-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-provider.js","sourceRoot":"","sources":["../src/llm-provider.ts"],"names":[],"mappings":"AAQA,IAAI,SAAS,GAAqB,IAAI,CAAC;AAEvC,MAAM,UAAU,YAAY,CAAC,MAAiB;IAC5C,SAAS,GAAG,MAAM,CAAC;AACrB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,YAAoB,EACpB,WAAmB;IAEnB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEzB,IAAI,SAAS,EAAE,WAAW,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC;gBACpC,YAAY;gBACZ,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;gBAClD,SAAS,EAAE,IAAI;aAChB,CAAC,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,+BAA+B,EAAE;gBAC3C,QAAQ,EAAE,SAAS,CAAC,IAAI;gBACxB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;aAC9B,CAAC,CAAC;YACH,OAAO;gBACL,OAAO,EAAE,QAAQ,CAAC,OAAO;gBACzB,QAAQ,EAAE,SAAS,CAAC,IAAI;gBACxB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;aAC9B,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,sDAAsD,EAAE;gBACnE,KAAK,EAAG,GAAa,CAAC,OAAO;aAC9B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;IACpE,OAAO;QACL,OAAO,EAAE,kBAAkB;QAC3B,QAAQ,EAAE,OAAO;QACjB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;KAC9B,CAAC;AACJ,CAAC"}
|
package/dist/memory-engine.d.ts
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
|
-
import type { IMemoryEngine, UserPrefs, Convention, ProjectContext, SessionEntry, SessionMemory, MemoryCandidate, KnowledgeEntry, MemoryEntryRecord, MemoryFilter, MemorySearchOptions, MemorySearchResult } from '@devflow-tools/sdk';
|
|
1
|
+
import type { IMemoryEngine, UserPrefs, Convention, ProjectContext, SessionEntry, SessionMemory, MemoryCandidate, KnowledgeEntry, MemoryEntryRecord, MemoryFilter, MemorySearchOptions, MemorySearchResult, LLMClient } from '@devflow-tools/sdk';
|
|
2
|
+
import { MemoryStore } from './memory-store.js';
|
|
3
|
+
import type { Signal } from './signal-detector.js';
|
|
2
4
|
import { EmbeddingProvider } from './embedding-provider.js';
|
|
3
5
|
export declare class MemoryEngine implements IMemoryEngine {
|
|
4
|
-
|
|
6
|
+
readonly store: MemoryStore;
|
|
5
7
|
private embedder;
|
|
6
8
|
private searcher;
|
|
7
9
|
private graph;
|
|
8
10
|
private rootPath;
|
|
9
|
-
constructor(rootPath: string, embedder?: EmbeddingProvider);
|
|
11
|
+
constructor(rootPath: string, embedder?: EmbeddingProvider, llmClient?: LLMClient);
|
|
10
12
|
private _initPromise;
|
|
11
13
|
private _embedderAvailable;
|
|
12
14
|
private ensureInit;
|
|
@@ -34,6 +36,8 @@ export declare class MemoryEngine implements IMemoryEngine {
|
|
|
34
36
|
search(query: string, options?: MemorySearchOptions): Promise<MemorySearchResult[]>;
|
|
35
37
|
listMemories(filter?: MemoryFilter): Promise<MemoryEntryRecord[]>;
|
|
36
38
|
addMemory(entry: Omit<MemoryEntryRecord, 'id' | 'createdAt' | 'status'>): Promise<MemoryEntryRecord>;
|
|
39
|
+
/** Map internal MemoryRow → SDK MemoryEntryRecord */
|
|
40
|
+
private _rowToRecord;
|
|
37
41
|
updateMemory(id: string, updates: Partial<Pick<MemoryEntryRecord, 'content' | 'status' | 'scope'>>): Promise<void>;
|
|
38
42
|
deleteMemory(id: string): Promise<void>;
|
|
39
43
|
getPendingMemories(): Promise<MemoryEntryRecord[]>;
|
|
@@ -42,7 +46,17 @@ export declare class MemoryEngine implements IMemoryEngine {
|
|
|
42
46
|
extractMemories(events: Array<Record<string, unknown>>): Promise<MemoryEntryRecord[]>;
|
|
43
47
|
getOllamaStatus(): Promise<import("./ollama-checker.js").OllamaStatus>;
|
|
44
48
|
consolidateSession(sessionId: string): Promise<MemoryEntryRecord | null>;
|
|
45
|
-
|
|
49
|
+
/**
|
|
50
|
+
* Pre-write contradiction check with LLM arbitration.
|
|
51
|
+
* Returns the decision: 'keep' (write new), 'merge' (update existing), 'skip' (don't write).
|
|
52
|
+
*/
|
|
53
|
+
detectAndArbitrateContradiction(content: string, embedding: Float32Array): Promise<{
|
|
54
|
+
decision: 'keep' | 'merge' | 'skip';
|
|
55
|
+
conflictingId?: string;
|
|
56
|
+
mergedContent?: string;
|
|
57
|
+
confidence?: number;
|
|
58
|
+
reason?: string;
|
|
59
|
+
}>;
|
|
46
60
|
close(): void;
|
|
47
61
|
recordEvent(event: {
|
|
48
62
|
id: string;
|
|
@@ -53,7 +67,11 @@ export declare class MemoryEngine implements IMemoryEngine {
|
|
|
53
67
|
stderr?: string;
|
|
54
68
|
durationMs?: number;
|
|
55
69
|
createdAt: number;
|
|
70
|
+
l1Score?: number;
|
|
71
|
+
dialogScore?: number;
|
|
72
|
+
userMessage?: string;
|
|
56
73
|
}): Promise<void>;
|
|
74
|
+
recordSignals(signals: Signal[]): void;
|
|
57
75
|
getEffectiveConfidence(entry: {
|
|
58
76
|
confidence: number;
|
|
59
77
|
createdAt: number;
|
|
@@ -72,5 +90,10 @@ export declare class MemoryEngine implements IMemoryEngine {
|
|
|
72
90
|
approved: number;
|
|
73
91
|
pending: number;
|
|
74
92
|
}>;
|
|
93
|
+
/** New: summarize a specific session's events into observations. */
|
|
94
|
+
summarizeSessionEvents(sessionId: string, projectRoot: string): Promise<{
|
|
95
|
+
observationCount: number;
|
|
96
|
+
provider: string;
|
|
97
|
+
}>;
|
|
75
98
|
}
|
|
76
99
|
//# sourceMappingURL=memory-engine.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-engine.d.ts","sourceRoot":"","sources":["../src/memory-engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,cAAc,EACpD,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,cAAc,EAC5D,iBAAiB,EAAE,YAAY,EAAE,mBAAmB,EAAE,kBAAkB,
|
|
1
|
+
{"version":3,"file":"memory-engine.d.ts","sourceRoot":"","sources":["../src/memory-engine.ts"],"names":[],"mappings":"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"}
|