@devflow-tools/memory-engine 0.14.4 → 0.16.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.
Files changed (88) hide show
  1. package/README.md +27 -26
  2. package/dist/consolidator.d.ts.map +1 -1
  3. package/dist/consolidator.js +31 -146
  4. package/dist/consolidator.js.map +1 -1
  5. package/dist/embedding-provider.d.ts +21 -1
  6. package/dist/embedding-provider.d.ts.map +1 -1
  7. package/dist/embedding-provider.js +157 -24
  8. package/dist/embedding-provider.js.map +1 -1
  9. package/dist/event-grouper.d.ts.map +1 -1
  10. package/dist/event-grouper.js +43 -1
  11. package/dist/event-grouper.js.map +1 -1
  12. package/dist/hybrid-search.d.ts +1 -1
  13. package/dist/hybrid-search.d.ts.map +1 -1
  14. package/dist/hybrid-search.js +44 -43
  15. package/dist/hybrid-search.js.map +1 -1
  16. package/dist/index.d.ts +6 -9
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +3 -5
  19. package/dist/index.js.map +1 -1
  20. package/dist/lease-store.d.ts +33 -0
  21. package/dist/lease-store.d.ts.map +1 -0
  22. package/dist/lease-store.js +178 -0
  23. package/dist/lease-store.js.map +1 -0
  24. package/dist/lease-store.test.d.ts +2 -0
  25. package/dist/lease-store.test.d.ts.map +1 -0
  26. package/dist/lease-store.test.js +167 -0
  27. package/dist/lease-store.test.js.map +1 -0
  28. package/dist/memory-engine.d.ts +12 -18
  29. package/dist/memory-engine.d.ts.map +1 -1
  30. package/dist/memory-engine.js +220 -148
  31. package/dist/memory-engine.js.map +1 -1
  32. package/dist/memory-gate.d.ts +64 -39
  33. package/dist/memory-gate.d.ts.map +1 -1
  34. package/dist/memory-gate.js +379 -45
  35. package/dist/memory-gate.js.map +1 -1
  36. package/dist/memory-store.d.ts +36 -1
  37. package/dist/memory-store.d.ts.map +1 -1
  38. package/dist/memory-store.js +142 -21
  39. package/dist/memory-store.js.map +1 -1
  40. package/dist/migrations/v2-to-v3.d.ts +3 -0
  41. package/dist/migrations/v2-to-v3.d.ts.map +1 -0
  42. package/dist/migrations/v2-to-v3.js +122 -0
  43. package/dist/migrations/v2-to-v3.js.map +1 -0
  44. package/dist/migrations/v2-to-v3.test.d.ts +2 -0
  45. package/dist/migrations/v2-to-v3.test.d.ts.map +1 -0
  46. package/dist/migrations/v2-to-v3.test.js +88 -0
  47. package/dist/migrations/v2-to-v3.test.js.map +1 -0
  48. package/dist/observation-types.d.ts +7 -0
  49. package/dist/observation-types.d.ts.map +1 -0
  50. package/dist/observation-types.js +27 -0
  51. package/dist/observation-types.js.map +1 -0
  52. package/dist/project-validator.d.ts.map +1 -1
  53. package/dist/project-validator.js +1 -2
  54. package/dist/project-validator.js.map +1 -1
  55. package/dist/rule-extractor.d.ts +14 -0
  56. package/dist/rule-extractor.d.ts.map +1 -0
  57. package/dist/rule-extractor.js +109 -0
  58. package/dist/rule-extractor.js.map +1 -0
  59. package/dist/session-summarizer.d.ts +16 -8
  60. package/dist/session-summarizer.d.ts.map +1 -1
  61. package/dist/session-summarizer.js +171 -160
  62. package/dist/session-summarizer.js.map +1 -1
  63. package/dist/{signal-detector.d.ts → signal-analyzer.d.ts} +6 -2
  64. package/dist/signal-analyzer.d.ts.map +1 -0
  65. package/dist/{signal-detector.js → signal-analyzer.js} +34 -3
  66. package/dist/signal-analyzer.js.map +1 -0
  67. package/dist/signal-buffer.d.ts +3 -0
  68. package/dist/signal-buffer.d.ts.map +1 -1
  69. package/dist/signal-buffer.js.map +1 -1
  70. package/package.json +6 -6
  71. package/dist/extractor.d.ts +0 -39
  72. package/dist/extractor.d.ts.map +0 -1
  73. package/dist/extractor.js +0 -275
  74. package/dist/extractor.js.map +0 -1
  75. package/dist/l2-evaluator.d.ts +0 -31
  76. package/dist/l2-evaluator.d.ts.map +0 -1
  77. package/dist/l2-evaluator.js +0 -103
  78. package/dist/l2-evaluator.js.map +0 -1
  79. package/dist/llm-provider.d.ts +0 -9
  80. package/dist/llm-provider.d.ts.map +0 -1
  81. package/dist/llm-provider.js +0 -37
  82. package/dist/llm-provider.js.map +0 -1
  83. package/dist/ollama-checker.d.ts +0 -10
  84. package/dist/ollama-checker.d.ts.map +0 -1
  85. package/dist/ollama-checker.js +0 -43
  86. package/dist/ollama-checker.js.map +0 -1
  87. package/dist/signal-detector.d.ts.map +0 -1
  88. package/dist/signal-detector.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devflow-tools/memory-engine",
3
- "version": "0.14.4",
3
+ "version": "0.16.0",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -17,19 +17,19 @@
17
17
  "clean": "rm -rf dist"
18
18
  },
19
19
  "dependencies": {
20
- "@devflow-tools/context-engine": "^0.14.4",
21
- "@devflow-tools/sdk": "^0.14.4",
20
+ "@devflow-tools/sdk": "0.16.0",
22
21
  "@xenova/transformers": "^2.17.0",
23
22
  "better-sqlite3": "^12.0.0",
24
- "sqlite-vec": "^0.1.9"
23
+ "sqlite-vec": "^0.1.9",
24
+ "ulidx": "^2.4.1"
25
25
  },
26
26
  "devDependencies": {
27
- "@devflow-tools/knowledge-engine": "^0.14.4",
27
+ "@devflow-tools/knowledge-engine": "0.16.0",
28
28
  "typescript": "^5.5.0",
29
29
  "vitest": "^2.0.0"
30
30
  },
31
31
  "files": [
32
32
  "dist"
33
33
  ],
34
- "gitHead": "54c8815398c8f60461caee19802afa3827ea3100"
34
+ "gitHead": "2f52776bda72517354d44453756cccb9e8de9afa"
35
35
  }
@@ -1,39 +0,0 @@
1
- import type { SessionEntry, MemoryCandidate, LLMClient } from "@devflow-tools/sdk";
2
- import { type OllamaStatus } from './ollama-checker.js';
3
- interface TelemetryEvent {
4
- type?: string;
5
- kind?: string;
6
- toolName?: string;
7
- mcpToolName?: string;
8
- errorMessage?: string;
9
- error?: string;
10
- command?: string;
11
- filePath?: string;
12
- prompt?: string;
13
- response?: string;
14
- timestamp?: number;
15
- }
16
- export interface ExtractedMemory {
17
- category: 'procedural' | 'semantic' | 'failure_lesson' | 'episodic';
18
- content: string;
19
- originalText?: string;
20
- confidence: number;
21
- }
22
- export declare function extractMemories(events: TelemetryEvent[], ollamaStatus?: OllamaStatus): Promise<ExtractedMemory[]>;
23
- interface ToolCallEvent {
24
- tool: string;
25
- command?: string;
26
- exitCode?: number;
27
- stderr?: string;
28
- }
29
- export declare function extractFromEvents(events: ToolCallEvent[]): ExtractedMemory[];
30
- export declare function extractCandidates(sessionId: string, entries: SessionEntry[]): MemoryCandidate[];
31
- export declare function setExtractionLLMClient(client: LLMClient): void;
32
- export declare function isExtractionAvailable(): boolean;
33
- export declare function extractViaClaudeAPI(events: Array<Record<string, unknown>>, sessionId: string): Promise<Array<{
34
- category: string;
35
- content: string;
36
- confidence: number;
37
- }>>;
38
- export {};
39
- //# sourceMappingURL=extractor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"extractor.d.ts","sourceRoot":"","sources":["../src/extractor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAmC,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEzF,UAAU,cAAc;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IACxC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,YAAY,GAAG,UAAU,GAAG,gBAAgB,GAAG,UAAU,CAAC;IACpE,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB;AAkED,wBAAsB,eAAe,CACnC,MAAM,EAAE,cAAc,EAAE,EACxB,YAAY,CAAC,EAAE,YAAY,GAC1B,OAAO,CAAC,eAAe,EAAE,CAAC,CAc5B;AAoBD,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AA8GD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,eAAe,EAAE,CAI5E;AAsBD,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,YAAY,EAAE,GACtB,eAAe,EAAE,CAoBnB;AAsBD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAE9D;AAED,wBAAgB,qBAAqB,IAAI,OAAO,CAE/C;AAED,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACtC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,KAAK,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAiB3E"}
package/dist/extractor.js DELETED
@@ -1,275 +0,0 @@
1
- import { checkOllama, generateWithOllama } from './ollama-checker.js';
2
- // L2 fallback patterns
3
- const CORRECTION_PATTERNS = [
4
- {
5
- pattern: /(?:error|failed|fix|retry|correct|use|pass|provide)\s+([\s\S]{10,200}?)(?:\.\s|$)/i,
6
- category: 'procedural',
7
- },
8
- {
9
- pattern: /(?:discovered|found|this project uses|note:)\s+([\s\S]{10,200}?)(?:\.\s|$)/i,
10
- category: 'semantic',
11
- },
12
- {
13
- pattern: /(?:don't|never|should not|must not)\s+([\s\S]{10,200}?)(?:\.\s|$)/i,
14
- category: 'failure_lesson',
15
- },
16
- ];
17
- async function extractWithOllama(events) {
18
- const eventText = events.map(e => {
19
- const tool = e.toolName ?? e.mcpToolName ?? e.type ?? 'unknown';
20
- const error = e.errorMessage ?? e.error ?? '';
21
- const response = e.response ?? '';
22
- return `[${tool}] ${response} ${error ? `ERROR: ${error}` : ''}`.trim();
23
- }).join('\n---\n');
24
- const system = `You are a memory extraction system. Analyze the agent's conversation logs and extract memories that will help avoid repeating mistakes.
25
-
26
- For each significant finding, output a JSON object with:
27
- - "category": one of "procedural", "semantic", "failure_lesson", "episodic"
28
- - "content": the memory text in English (translate Chinese input — accurate English improves search quality)
29
- - "confidence": 0.0 to 1.0
30
-
31
- Return ONLY a JSON array, no other text. Example:
32
- [{"category":"procedural","content":"react_diagnose_bug requires stackTrace as string","confidence":0.9}]`;
33
- try {
34
- const text = await generateWithOllama(eventText.slice(0, 8000), system);
35
- const jsonMatch = text.match(/\[[\s\S]*\]/);
36
- if (!jsonMatch)
37
- return [];
38
- const parsed = JSON.parse(jsonMatch[0]);
39
- return parsed.filter(e => e.content && e.category && e.confidence >= 0);
40
- }
41
- catch {
42
- return [];
43
- }
44
- }
45
- function extractWithRules(events) {
46
- const results = [];
47
- for (const event of events) {
48
- const text = [event.errorMessage, event.error, event.response, event.prompt].filter(Boolean).join(' ');
49
- if (!text)
50
- continue;
51
- for (const { pattern, category } of CORRECTION_PATTERNS) {
52
- const match = text.match(pattern);
53
- if (match?.[1]) {
54
- const content = match[1].trim();
55
- if (content.length >= 10 && !results.some(r => r.content === content)) {
56
- results.push({ content, category, confidence: 0.5 });
57
- }
58
- break;
59
- }
60
- }
61
- }
62
- return results;
63
- }
64
- export async function extractMemories(events, ollamaStatus) {
65
- const status = ollamaStatus ?? await checkOllama();
66
- let extracted = [];
67
- if (status.installed && status.running && status.modelAvailable) {
68
- extracted = await extractWithOllama(events);
69
- }
70
- if (extracted.length === 0) {
71
- extracted = extractWithRules(events);
72
- }
73
- const MIN_CONFIDENCE = 0.4;
74
- return extracted.filter(c => c.confidence >= MIN_CONFIDENCE);
75
- }
76
- // --- L1: Error keyword patterns for real-time extraction ---
77
- const L1_ERROR_PATTERNS = [
78
- { pattern: /ENOENT:\s*no such file or directory/i, shortDesc: 'File not found (ENOENT)' },
79
- { pattern: /MODULE_NOT_FOUND/i, shortDesc: 'Module not found' },
80
- { pattern: /TypeError:\s*(.+?)(?:\n|$)/i, shortDesc: 'TypeError occurred' },
81
- { pattern: /ReferenceError:\s*(.+?)(?:\n|$)/i, shortDesc: 'ReferenceError occurred' },
82
- { pattern: /syntax error/i, shortDesc: 'Syntax error in command' },
83
- { pattern: /permission denied/i, shortDesc: 'Permission denied' },
84
- { pattern: /command not found/i, shortDesc: 'Command not found' },
85
- { pattern: /ECONNREFUSED/i, shortDesc: 'Connection refused' },
86
- { pattern: /ETIMEDOUT/i, shortDesc: 'Connection timed out' },
87
- { pattern: /Cannot find module\s+(['"`])(.+?)\1/i, shortDesc: 'Cannot find module' },
88
- { pattern: /FOREIGN KEY constraint failed/i, shortDesc: 'Foreign key constraint violation' },
89
- { pattern: /UNIQUE constraint failed/i, shortDesc: 'Unique constraint violation' },
90
- { pattern: /out of memory/i, shortDesc: 'Out of memory' },
91
- ];
92
- function extractL1Errors(events) {
93
- const results = [];
94
- for (const event of events) {
95
- // Skip non-Bash tools — they don't have meaningful exit codes/stderr
96
- if (event.tool !== 'Bash' && event.tool !== 'bash_command')
97
- continue;
98
- // Multi-signal: stderr, exitCode, command keywords, HTTP status
99
- const stderrText = event.stderr ?? '';
100
- const hasErrorCode = event.exitCode !== undefined && event.exitCode !== null && event.exitCode !== 0;
101
- const cmdLower = (event.command ?? '').toLowerCase();
102
- const hasErrorKeyword = /error:|failed|traceback|fatal|killed/i.test(cmdLower);
103
- const hasHttpError = /HTTP\s+[45]\d{2}/i.test(stderrText);
104
- if (!stderrText && !hasErrorCode && !hasErrorKeyword && !hasHttpError)
105
- continue;
106
- const searchText = [stderrText, event.command].filter(Boolean).join(' ');
107
- for (const { pattern, shortDesc } of L1_ERROR_PATTERNS) {
108
- const match = searchText.match(pattern);
109
- if (match) {
110
- const detail = (match[1] ?? match[0]).slice(0, 80);
111
- const content = `Error in \`${event.command ?? event.tool}\`: ${shortDesc} — ${detail}`;
112
- if (!results.some(r => r.content === content)) {
113
- results.push({
114
- category: 'failure_lesson',
115
- content,
116
- confidence: hasErrorCode ? 0.85 : 0.5,
117
- });
118
- }
119
- break;
120
- }
121
- }
122
- }
123
- return results;
124
- }
125
- // L2: Command-result association — failure followed by success within 5 events
126
- function extractL2Corrections(events) {
127
- const results = [];
128
- for (let i = 0; i < events.length; i++) {
129
- const current = events[i];
130
- if (!current?.command)
131
- continue;
132
- // Skip only confirmed success (exitCode === 0); NULL exitCode = unknown, don't skip
133
- if (current.exitCode === 0)
134
- continue;
135
- for (let j = i + 1; j < Math.min(i + 6, events.length); j++) {
136
- const later = events[j];
137
- if (!later?.command)
138
- continue;
139
- // Skip only confirmed failures (exitCode !== 0 && !== null)
140
- if (later.exitCode != null && later.exitCode !== 0)
141
- continue;
142
- const curBase = current.command.split(' ')[0];
143
- const laterBase = later.command.split(' ')[0];
144
- if (curBase === laterBase && later.command !== current.command) {
145
- const content = `When \`${current.command.slice(0, 60)}\` fails, use \`${later.command.slice(0, 60)}\` instead`;
146
- if (!results.some(r => r.content === content)) {
147
- results.push({ category: 'procedural', content, confidence: 0.9 });
148
- }
149
- break;
150
- }
151
- }
152
- }
153
- return results;
154
- }
155
- // L3: Project knowledge from tool call patterns (even successful ones)
156
- function extractL3Knowledge(events) {
157
- const results = [];
158
- for (const event of events) {
159
- if (!event.command)
160
- continue;
161
- // install/npm commands revealing dependencies
162
- if (event.command.match(/npm\s+(install|ci)|pnpm\s+(install|add)|yarn\s+add/)) {
163
- const pkgMatch = event.command.match(/(?:install|add)\s+(?:-[\w]+\s+)*(@?[\w@./-]+)/);
164
- if (pkgMatch?.[1]) {
165
- const content = `Project uses package: ${pkgMatch[1]}`;
166
- if (!results.some(r => r.content === content)) {
167
- results.push({ category: 'semantic', content, confidence: 0.65 });
168
- }
169
- }
170
- }
171
- // npx/dlx/pnpm exec revealing tooling
172
- if (event.command.match(/npx\s+|pnpm\s+exec\s+|pnpm\s+dlx\s+/)) {
173
- const toolMatch = event.command.match(/(?:npx|pnpm\s+(?:exec|dlx))\s+(.+?)\s*$/);
174
- if (toolMatch?.[1]) {
175
- const tool = toolMatch[1].trim();
176
- const content = `Project uses tool: ${tool}`;
177
- if (!results.some(r => r.content === content)) {
178
- results.push({ category: 'semantic', content, confidence: 0.65 });
179
- }
180
- }
181
- }
182
- // npm scripts pattern
183
- const scriptMatch = event.command.match(/npm\s+run\s+(\S+)/);
184
- if (scriptMatch?.[1]) {
185
- const content = `Project has npm script: ${scriptMatch[1]}`;
186
- if (!results.some(r => r.content === content)) {
187
- results.push({ category: 'semantic', content, confidence: 0.6 });
188
- }
189
- }
190
- }
191
- return results;
192
- }
193
- export function extractFromEvents(events) {
194
- const MIN_CONFIDENCE = 0.4;
195
- return [...extractL1Errors(events), ...extractL2Corrections(events), ...extractL3Knowledge(events)]
196
- .filter(c => c.confidence >= MIN_CONFIDENCE);
197
- }
198
- // --- Legacy extractor (backward compat) ---
199
- const PATTERNS = [
200
- {
201
- pattern: /(?:Using|Used|Use)\s+(?:@?[A-Z][a-zA-Z]*\s+)?([A-Z][a-zA-Z]+)\s+(?:for|as|in)/,
202
- type: "project",
203
- extractKey: (m) => `stack:${m[1].toLowerCase()}`,
204
- },
205
- {
206
- pattern: /follow(?:ed|ing|s)?\s+(?:the\s+)?([A-Za-z\s]+)\s+(?:pattern|convention)/i,
207
- type: "project",
208
- extractKey: (m) => `convention:${m[1].trim().toLowerCase().replace(/\s+/g, "-")}`,
209
- },
210
- {
211
- pattern: /prefer(?:s|red)?\s+(?:to\s+)?(?:use\s+)?([A-Za-z]+)/i,
212
- type: "project",
213
- extractKey: (m) => `pref:${m[1].toLowerCase()}`,
214
- },
215
- ];
216
- export function extractCandidates(sessionId, entries) {
217
- const candidates = [];
218
- for (const entry of entries) {
219
- for (const { pattern, type, extractKey } of PATTERNS) {
220
- const match = entry.summary.match(pattern);
221
- if (match) {
222
- candidates.push({
223
- id: `candidate:${sessionId}:${candidates.length}`,
224
- type,
225
- content: { key: extractKey(match), value: entry.summary },
226
- confidence: 0.7,
227
- source: sessionId,
228
- });
229
- break;
230
- }
231
- }
232
- }
233
- return candidates;
234
- }
235
- const MEMORY_EXTRACTION_PROMPT = `You are a memory extraction system. Given a list of tool calls
236
- from a coding session, extract 3-8 structured memories. Each memory should
237
- capture a meaningful observation, lesson, pattern, or decision.
238
-
239
- For each memory, output JSON with:
240
- - category: "procedural" | "failure_lesson" | "semantic" | "project_knowledge"
241
- - content: one concise sentence
242
- - confidence: 0.0-1.0
243
-
244
- Rules:
245
- - Ignore trivial operations (ls, cat, grep, echo, cd, pwd, etc.)
246
- - Aggregate repeated similar calls into one memory
247
- - Focus on what was LEARNED or CHANGED, not what was executed
248
- - Prioritize errors and their fixes (high signal)
249
- - Project tool usage patterns (e.g. "This project uses vitest for testing")
250
-
251
- Respond with ONLY a JSON array.`;
252
- let extractionClient = null;
253
- export function setExtractionLLMClient(client) {
254
- extractionClient = client;
255
- }
256
- export function isExtractionAvailable() {
257
- return extractionClient?.isAvailable ?? false;
258
- }
259
- export async function extractViaClaudeAPI(events, sessionId) {
260
- if (!extractionClient?.isAvailable) {
261
- return [];
262
- }
263
- const response = await extractionClient.chat({
264
- systemPrompt: MEMORY_EXTRACTION_PROMPT,
265
- messages: [{
266
- role: 'user',
267
- content: `Session: ${sessionId}\nTool calls:\n${JSON.stringify(events, null, 2)}`,
268
- }],
269
- maxTokens: 1024,
270
- });
271
- const text = response.content;
272
- const jsonMatch = text.match(/```(?:json)?\s*([\s\S]*?)```/) ?? [null, text];
273
- return JSON.parse(jsonMatch[1].trim());
274
- }
275
- //# sourceMappingURL=extractor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"extractor.js","sourceRoot":"","sources":["../src/extractor.ts"],"names":[],"mappings":"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"}
@@ -1,31 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,103 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"l2-evaluator.js","sourceRoot":"","sources":["../src/l2-evaluator.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,37 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,10 +0,0 @@
1
- export interface OllamaStatus {
2
- installed: boolean;
3
- running: boolean;
4
- modelAvailable: boolean;
5
- modelName: string;
6
- }
7
- export declare function checkOllama(modelName?: string): Promise<OllamaStatus>;
8
- export declare function getOllamaInfoMessage(status: OllamaStatus): string | null;
9
- export declare function generateWithOllama(prompt: string, system?: string, modelName?: string): Promise<string>;
10
- //# sourceMappingURL=ollama-checker.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ollama-checker.d.ts","sourceRoot":"","sources":["../src/ollama-checker.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,OAAO,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CACnB;AAID,wBAAsB,WAAW,CAAC,SAAS,GAAE,MAAsB,GAAG,OAAO,CAAC,YAAY,CAAC,CAiB1F;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,GAAG,IAAI,CAKxE;AAED,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,SAAS,GAAE,MAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,CAS5H"}
@@ -1,43 +0,0 @@
1
- import { execSync } from 'node:child_process';
2
- const DEFAULT_MODEL = 'llama3.2';
3
- export async function checkOllama(modelName = DEFAULT_MODEL) {
4
- const status = { installed: false, running: false, modelAvailable: false, modelName };
5
- try {
6
- execSync('which ollama', { stdio: 'pipe' });
7
- status.installed = true;
8
- }
9
- catch {
10
- return status;
11
- }
12
- try {
13
- const resp = await fetch('http://localhost:11434/api/tags');
14
- if (resp.ok) {
15
- status.running = true;
16
- const data = await resp.json();
17
- status.modelAvailable = (data.models ?? []).some(m => m.name.startsWith(modelName));
18
- }
19
- }
20
- catch { /* server not running */ }
21
- return status;
22
- }
23
- export function getOllamaInfoMessage(status) {
24
- if (!status.installed)
25
- return 'Ollama not installed. Install from https://ollama.com/download then run: ollama pull llama3.2';
26
- if (!status.running)
27
- return 'Ollama installed but not running. Start it with: ollama serve';
28
- if (!status.modelAvailable)
29
- return `Model ${status.modelName} not pulled. Run: ollama pull ${status.modelName}`;
30
- return null;
31
- }
32
- export async function generateWithOllama(prompt, system, modelName = DEFAULT_MODEL) {
33
- const resp = await fetch('http://localhost:11434/api/generate', {
34
- method: 'POST',
35
- headers: { 'Content-Type': 'application/json' },
36
- body: JSON.stringify({ model: modelName, prompt, system, stream: false }),
37
- });
38
- if (!resp.ok)
39
- throw new Error(`Ollama generate failed: ${resp.status} ${await resp.text()}`);
40
- const data = await resp.json();
41
- return data.response;
42
- }
43
- //# sourceMappingURL=ollama-checker.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ollama-checker.js","sourceRoot":"","sources":["../src/ollama-checker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAS9C,MAAM,aAAa,GAAG,UAAU,CAAC;AAEjC,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,YAAoB,aAAa;IACjE,MAAM,MAAM,GAAiB,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IACpG,IAAI,CAAC;QACH,QAAQ,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAC5C,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,iCAAiC,CAAC,CAAC;QAC5D,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;YACtB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAA0C,CAAC;YACvE,MAAM,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;QACtF,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,wBAAwB,CAAC,CAAC;IACpC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAoB;IACvD,IAAI,CAAC,MAAM,CAAC,SAAS;QAAE,OAAO,+FAA+F,CAAC;IAC9H,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO,+DAA+D,CAAC;IAC5F,IAAI,CAAC,MAAM,CAAC,cAAc;QAAE,OAAO,SAAS,MAAM,CAAC,SAAS,iCAAiC,MAAM,CAAC,SAAS,EAAE,CAAC;IAChH,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,MAAc,EAAE,MAAe,EAAE,YAAoB,aAAa;IACzG,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,qCAAqC,EAAE;QAC9D,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;KAC1E,CAAC,CAAC;IACH,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,CAAC,MAAM,IAAI,MAAM,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC7F,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAA0B,CAAC;IACvD,OAAO,IAAI,CAAC,QAAQ,CAAC;AACvB,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"signal-detector.d.ts","sourceRoot":"","sources":["../src/signal-detector.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,YAAY,sQAMf,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAEvD,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAID,qBAAa,cAAc;IACzB,OAAO,CAAC,UAAU,CAA0B;IAC5C,OAAO,CAAC,UAAU,CAAkC;IACpD,OAAO,CAAC,eAAe,CAAkD;IAEzE,KAAK,IAAI,IAAI;IAQb,MAAM,CACJ,KAAK,EAAE,SAAS,EAChB,YAAY,EAAE,SAAS,EAAE,EACzB,WAAW,CAAC,EAAE,WAAW,GACxB,MAAM,EAAE;IAiBX,OAAO,CAAC,WAAW;IA2FnB,OAAO,CAAC,YAAY;IAgEpB,OAAO,CAAC,eAAe;IAoDvB,OAAO,CAAC,UAAU;IAiBlB,OAAO,CAAC,eAAe;CAgBxB"}