@devflow-tools/memory-engine 0.15.0 → 0.16.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/README.md +27 -26
- package/dist/consolidator.d.ts.map +1 -1
- package/dist/consolidator.js +31 -146
- package/dist/consolidator.js.map +1 -1
- package/dist/embedding-provider.d.ts +21 -1
- package/dist/embedding-provider.d.ts.map +1 -1
- package/dist/embedding-provider.js +157 -24
- package/dist/embedding-provider.js.map +1 -1
- package/dist/event-grouper.d.ts.map +1 -1
- package/dist/event-grouper.js +43 -1
- package/dist/event-grouper.js.map +1 -1
- package/dist/hybrid-search.d.ts +1 -1
- package/dist/hybrid-search.d.ts.map +1 -1
- package/dist/hybrid-search.js +44 -43
- package/dist/hybrid-search.js.map +1 -1
- package/dist/index.d.ts +6 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -5
- package/dist/index.js.map +1 -1
- package/dist/lease-store.d.ts +33 -0
- package/dist/lease-store.d.ts.map +1 -0
- package/dist/lease-store.js +178 -0
- package/dist/lease-store.js.map +1 -0
- package/dist/lease-store.test.d.ts +2 -0
- package/dist/lease-store.test.d.ts.map +1 -0
- package/dist/lease-store.test.js +167 -0
- package/dist/lease-store.test.js.map +1 -0
- package/dist/memory-engine.d.ts +12 -18
- package/dist/memory-engine.d.ts.map +1 -1
- package/dist/memory-engine.js +220 -148
- package/dist/memory-engine.js.map +1 -1
- package/dist/memory-gate.d.ts +64 -39
- package/dist/memory-gate.d.ts.map +1 -1
- package/dist/memory-gate.js +379 -45
- package/dist/memory-gate.js.map +1 -1
- package/dist/memory-store.d.ts +36 -1
- package/dist/memory-store.d.ts.map +1 -1
- package/dist/memory-store.js +142 -21
- package/dist/memory-store.js.map +1 -1
- package/dist/migrations/v2-to-v3.d.ts +3 -0
- package/dist/migrations/v2-to-v3.d.ts.map +1 -0
- package/dist/migrations/v2-to-v3.js +122 -0
- package/dist/migrations/v2-to-v3.js.map +1 -0
- package/dist/migrations/v2-to-v3.test.d.ts +2 -0
- package/dist/migrations/v2-to-v3.test.d.ts.map +1 -0
- package/dist/migrations/v2-to-v3.test.js +88 -0
- package/dist/migrations/v2-to-v3.test.js.map +1 -0
- package/dist/observation-types.d.ts +7 -0
- package/dist/observation-types.d.ts.map +1 -0
- package/dist/observation-types.js +27 -0
- package/dist/observation-types.js.map +1 -0
- package/dist/project-validator.d.ts.map +1 -1
- package/dist/project-validator.js +1 -2
- package/dist/project-validator.js.map +1 -1
- package/dist/rule-extractor.d.ts +14 -0
- package/dist/rule-extractor.d.ts.map +1 -0
- package/dist/rule-extractor.js +109 -0
- package/dist/rule-extractor.js.map +1 -0
- package/dist/session-summarizer.d.ts +16 -8
- package/dist/session-summarizer.d.ts.map +1 -1
- package/dist/session-summarizer.js +171 -160
- package/dist/session-summarizer.js.map +1 -1
- package/dist/{signal-detector.d.ts → signal-analyzer.d.ts} +6 -2
- package/dist/signal-analyzer.d.ts.map +1 -0
- package/dist/{signal-detector.js → signal-analyzer.js} +34 -3
- package/dist/signal-analyzer.js.map +1 -0
- package/dist/signal-buffer.d.ts +3 -0
- package/dist/signal-buffer.d.ts.map +1 -1
- package/dist/signal-buffer.js.map +1 -1
- package/package.json +6 -6
- package/dist/extractor.d.ts +0 -39
- package/dist/extractor.d.ts.map +0 -1
- package/dist/extractor.js +0 -275
- package/dist/extractor.js.map +0 -1
- package/dist/l2-evaluator.d.ts +0 -31
- package/dist/l2-evaluator.d.ts.map +0 -1
- package/dist/l2-evaluator.js +0 -103
- package/dist/l2-evaluator.js.map +0 -1
- package/dist/llm-provider.d.ts +0 -9
- package/dist/llm-provider.d.ts.map +0 -1
- package/dist/llm-provider.js +0 -37
- package/dist/llm-provider.js.map +0 -1
- package/dist/ollama-checker.d.ts +0 -10
- package/dist/ollama-checker.d.ts.map +0 -1
- package/dist/ollama-checker.js +0 -43
- package/dist/ollama-checker.js.map +0 -1
- package/dist/signal-detector.d.ts.map +0 -1
- package/dist/signal-detector.js.map +0 -1
package/dist/memory-gate.d.ts
CHANGED
|
@@ -1,6 +1,18 @@
|
|
|
1
|
-
import type { IMemoryEngine, UserPrefs, Convention, ProjectContext, SessionEntry, SessionMemory, MemoryCandidate, KnowledgeEntry, MemoryEntryRecord, MemoryFilter, MemorySearchOptions, MemorySearchResult,
|
|
2
|
-
import
|
|
1
|
+
import type { IMemoryEngine, UserPrefs, Convention, ProjectContext, SessionEntry, SessionMemory, MemoryCandidate, KnowledgeEntry, MemoryEntryRecord, MemoryFilter, MemorySearchOptions, MemorySearchResult, SessionEventInput, GetMemoryOptions, GetMemoryResult, MemorySnapshotItem } from '@devflow-tools/sdk';
|
|
2
|
+
import { EmbeddingProvider } from './embedding-provider.js';
|
|
3
|
+
import { type ParsedObservation } from './session-summarizer.js';
|
|
4
|
+
import { LeaseStore } from './lease-store.js';
|
|
3
5
|
type GateState = 'cold' | 'warming' | 'hot';
|
|
6
|
+
interface PendingDistillData {
|
|
7
|
+
batchId: string;
|
|
8
|
+
sessionIds: string[];
|
|
9
|
+
sessionCount: number;
|
|
10
|
+
eventCount: number;
|
|
11
|
+
groupCount: number;
|
|
12
|
+
systemPrompt: string;
|
|
13
|
+
userPrompt: string;
|
|
14
|
+
eventsJson: string;
|
|
15
|
+
}
|
|
4
16
|
export declare class MemoryGate implements IMemoryEngine {
|
|
5
17
|
private buffer;
|
|
6
18
|
private engine;
|
|
@@ -9,13 +21,15 @@ export declare class MemoryGate implements IMemoryEngine {
|
|
|
9
21
|
private projectValid;
|
|
10
22
|
private initPromise;
|
|
11
23
|
private projectRoot;
|
|
12
|
-
private embedder
|
|
13
|
-
private llmClient?;
|
|
24
|
+
private embedder;
|
|
14
25
|
private needsColdFlush;
|
|
15
|
-
private
|
|
26
|
+
private analyzer;
|
|
16
27
|
private recentEvents;
|
|
17
28
|
private pendingUserMessage;
|
|
18
|
-
|
|
29
|
+
private leases;
|
|
30
|
+
private eventWriteQueue;
|
|
31
|
+
private ruleExtractionQueue;
|
|
32
|
+
constructor(projectRoot: string, embedder?: EmbeddingProvider);
|
|
19
33
|
recordEvent(event: {
|
|
20
34
|
id: string;
|
|
21
35
|
sessionId: string;
|
|
@@ -25,6 +39,8 @@ export declare class MemoryGate implements IMemoryEngine {
|
|
|
25
39
|
stderr?: string;
|
|
26
40
|
durationMs?: number;
|
|
27
41
|
createdAt: number;
|
|
42
|
+
kind?: string;
|
|
43
|
+
payload?: Record<string, unknown>;
|
|
28
44
|
}): Promise<void>;
|
|
29
45
|
recordUserMessage(message: string): Promise<void>;
|
|
30
46
|
getGateState(): GateState;
|
|
@@ -37,9 +53,26 @@ export declare class MemoryGate implements IMemoryEngine {
|
|
|
37
53
|
};
|
|
38
54
|
forceWarmUp(): Promise<void>;
|
|
39
55
|
isHot(): boolean;
|
|
56
|
+
setLeaseStore(store: LeaseStore): void;
|
|
57
|
+
/**
|
|
58
|
+
* Returns unprocessed session events grouped and formatted for LLM distillation.
|
|
59
|
+
* The MCP tool memory_request_distill calls this to get data for Claude to process.
|
|
60
|
+
*/
|
|
61
|
+
getPendingDistillData(sessionId?: string): Promise<PendingDistillData | null>;
|
|
62
|
+
releasePendingDistillLeases(sessionId?: string): Promise<number>;
|
|
63
|
+
saveDistilledObservationsByBatch(batchId: string, observations: ParsedObservation[]): Promise<number>;
|
|
64
|
+
logInvalidDistillBatch(batchId: string): void;
|
|
65
|
+
/**
|
|
66
|
+
* Saves distilled observations from Claude and marks source events as processed.
|
|
67
|
+
* @deprecated Use saveDistilledObservationsByBatch(batchId, observations) instead.
|
|
68
|
+
*/
|
|
69
|
+
saveDistilledObservations(observations: ParsedObservation[], sessionId: string): number;
|
|
70
|
+
/** Returns the count of unprocessed events (for session-start hook). */
|
|
71
|
+
getPendingEventCount(): number;
|
|
40
72
|
private maybeWarmUp;
|
|
41
73
|
private _doWarmUp;
|
|
42
74
|
private requireEngine;
|
|
75
|
+
private getStoreDb;
|
|
43
76
|
getUserPreferences(): Promise<UserPrefs>;
|
|
44
77
|
updateUserPreference(key: string, value: unknown): Promise<void>;
|
|
45
78
|
getProjectContext(): Promise<ProjectContext>;
|
|
@@ -51,22 +84,27 @@ export declare class MemoryGate implements IMemoryEngine {
|
|
|
51
84
|
closeSession(sessionId: string): Promise<void>;
|
|
52
85
|
searchGlobal(query: string): Promise<KnowledgeEntry[]>;
|
|
53
86
|
upsertGlobal(entries: KnowledgeEntry[]): Promise<void>;
|
|
54
|
-
getAll(): Promise<{
|
|
55
|
-
project: ProjectContext;
|
|
56
|
-
user: UserPrefs;
|
|
87
|
+
getAll(options?: string | GetMemoryOptions): Promise<GetMemoryResult & {
|
|
57
88
|
relevant: KnowledgeEntry[];
|
|
58
|
-
} | {
|
|
59
|
-
project: {
|
|
60
|
-
stack: never[];
|
|
61
|
-
conventions: never[];
|
|
62
|
-
metadata: {};
|
|
63
|
-
};
|
|
64
|
-
user: {
|
|
65
|
-
preferences: {};
|
|
66
|
-
stack: never[];
|
|
67
|
-
};
|
|
68
|
-
relevant: never[];
|
|
69
89
|
}>;
|
|
90
|
+
saveExplicitMemoryIntent(content: string, sessionId?: string): Promise<MemorySnapshotItem>;
|
|
91
|
+
listObservationMemories(source?: string): Promise<MemorySnapshotItem[]>;
|
|
92
|
+
backfillObservationVectors(options?: {
|
|
93
|
+
batchSize?: number;
|
|
94
|
+
onProgress?: (progress: {
|
|
95
|
+
processed: number;
|
|
96
|
+
remaining: number;
|
|
97
|
+
lastId?: string;
|
|
98
|
+
}) => void;
|
|
99
|
+
}): Promise<{
|
|
100
|
+
processed: number;
|
|
101
|
+
remaining: number;
|
|
102
|
+
}>;
|
|
103
|
+
getObservationVectorCoverage(): {
|
|
104
|
+
observations: number;
|
|
105
|
+
vectors: number;
|
|
106
|
+
missing: number;
|
|
107
|
+
};
|
|
70
108
|
getCandidates(): Promise<MemoryCandidate[]>;
|
|
71
109
|
approveCandidate(id: string): Promise<void>;
|
|
72
110
|
rejectCandidate(id: string): Promise<void>;
|
|
@@ -78,31 +116,18 @@ export declare class MemoryGate implements IMemoryEngine {
|
|
|
78
116
|
getPendingMemories(): Promise<MemoryEntryRecord[]>;
|
|
79
117
|
approveMemory(id: string): Promise<void>;
|
|
80
118
|
rejectMemory(id: string): Promise<void>;
|
|
81
|
-
extractMemories(events: Array<Record<string, unknown>>): Promise<MemoryEntryRecord[]>;
|
|
82
119
|
extractFromEventsRealtime(events: Array<{
|
|
83
120
|
tool: string;
|
|
84
121
|
command?: string;
|
|
85
122
|
exitCode?: number;
|
|
86
123
|
stderr?: string;
|
|
87
124
|
}>): Promise<MemoryEntryRecord[]>;
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
processSessionEvents(): Promise<{
|
|
95
|
-
extracted: number;
|
|
96
|
-
approved: number;
|
|
97
|
-
pending: number;
|
|
98
|
-
}>;
|
|
99
|
-
/** Drain buffer and run Session Summarizer on the session. Called at session end. */
|
|
100
|
-
evaluateBuffer(sessionId: string): Promise<{
|
|
101
|
-
l2Evaluated: number;
|
|
102
|
-
l2Kept: number;
|
|
103
|
-
directWrite: number;
|
|
104
|
-
discarded: number;
|
|
105
|
-
}>;
|
|
125
|
+
ingestSessionEvent(event: SessionEventInput): Promise<MemoryEntryRecord[]>;
|
|
126
|
+
recordSessionEvent(event: SessionEventInput): Promise<void>;
|
|
127
|
+
extractRecordedSessionRules(sessionId: string): Promise<MemoryEntryRecord[]>;
|
|
128
|
+
private recordSessionEventSerial;
|
|
129
|
+
/** Drain the signal buffer without running summarizer. Events are already persisted. */
|
|
130
|
+
drainBuffer(): void;
|
|
106
131
|
close(): void;
|
|
107
132
|
}
|
|
108
133
|
declare function scoreL1Rules(event: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-gate.d.ts","sourceRoot":"","sources":["../src/memory-gate.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,EACxE,
|
|
1
|
+
{"version":3,"file":"memory-gate.d.ts","sourceRoot":"","sources":["../src/memory-gate.ts"],"names":[],"mappings":"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"}
|