@xfabric/memory 0.2.9 → 0.2.11
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/flush/flush-agent.d.ts +42 -0
- package/dist/flush/flush-agent.d.ts.map +1 -0
- package/dist/flush/flush-agent.js +260 -0
- package/dist/flush/flush-agent.js.map +1 -0
- package/dist/flush/index.d.ts +6 -0
- package/dist/flush/index.d.ts.map +1 -0
- package/dist/flush/index.js +6 -0
- package/dist/flush/index.js.map +1 -0
- package/dist/flush/prompts.d.ts +38 -0
- package/dist/flush/prompts.d.ts.map +1 -0
- package/dist/flush/prompts.js +116 -0
- package/dist/flush/prompts.js.map +1 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/memory-manager.d.ts +38 -1
- package/dist/memory-manager.d.ts.map +1 -1
- package/dist/memory-manager.js +209 -1
- package/dist/memory-manager.js.map +1 -1
- package/dist/plugin/index.d.ts +3 -1
- package/dist/plugin/index.d.ts.map +1 -1
- package/dist/plugin/index.js +244 -9
- package/dist/plugin/index.js.map +1 -1
- package/dist/sync/index.d.ts +1 -0
- package/dist/sync/index.d.ts.map +1 -1
- package/dist/sync/index.js +1 -0
- package/dist/sync/index.js.map +1 -1
- package/dist/sync/opencode-session.d.ts +32 -0
- package/dist/sync/opencode-session.d.ts.map +1 -0
- package/dist/sync/opencode-session.js +283 -0
- package/dist/sync/opencode-session.js.map +1 -0
- package/dist/types.d.ts +179 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +9 -0
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM Memory Flush Agent
|
|
3
|
+
* Extracts durable memories from session history before compaction
|
|
4
|
+
*/
|
|
5
|
+
import type { FlushAgentParams, FlushResult, MemoryFlushConfig, FlushSessionEntry, MemoryWriteOptions, MemoryWriteResult } from "../types.js";
|
|
6
|
+
/**
|
|
7
|
+
* Default memory flush configuration
|
|
8
|
+
*/
|
|
9
|
+
export declare const DEFAULT_MEMORY_FLUSH_CONFIG: MemoryFlushConfig;
|
|
10
|
+
/**
|
|
11
|
+
* Resolve memory flush settings with defaults
|
|
12
|
+
*/
|
|
13
|
+
export declare function resolveMemoryFlushConfig(config?: Partial<MemoryFlushConfig>): MemoryFlushConfig | null;
|
|
14
|
+
/**
|
|
15
|
+
* Check if memory flush should run based on token thresholds
|
|
16
|
+
*/
|
|
17
|
+
export declare function shouldRunMemoryFlush(params: {
|
|
18
|
+
entry?: FlushSessionEntry;
|
|
19
|
+
contextWindowTokens: number;
|
|
20
|
+
reserveTokensFloor: number;
|
|
21
|
+
softThresholdTokens: number;
|
|
22
|
+
}): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Run the memory flush agent with LLM extraction
|
|
25
|
+
*
|
|
26
|
+
* This function either:
|
|
27
|
+
* 1. Uses a provided LLM chat function to extract memories
|
|
28
|
+
* 2. Falls back to tool-based extraction if no LLM is provided
|
|
29
|
+
*/
|
|
30
|
+
export declare function runMemoryFlushAgent(params: FlushAgentParams): Promise<FlushResult>;
|
|
31
|
+
/**
|
|
32
|
+
* Create a simple memory write function for use with the flush agent
|
|
33
|
+
*/
|
|
34
|
+
export declare function createMemoryWriter(memoryDir: string): (content: string, options?: MemoryWriteOptions) => Promise<MemoryWriteResult>;
|
|
35
|
+
/**
|
|
36
|
+
* Extract session history from messages for flush context
|
|
37
|
+
*/
|
|
38
|
+
export declare function formatSessionHistoryForFlush(messages: Array<{
|
|
39
|
+
role: string;
|
|
40
|
+
content: string;
|
|
41
|
+
}>): string;
|
|
42
|
+
//# sourceMappingURL=flush-agent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flush-agent.d.ts","sourceRoot":"","sources":["../../src/flush/flush-agent.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,gBAAgB,EAChB,WAAW,EACX,iBAAiB,EACjB,iBAAiB,EAGjB,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,aAAa,CAAC;AAarB;;GAEG;AACH,eAAO,MAAM,2BAA2B,EAAE,iBAMzC,CAAC;AAEF;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAClC,iBAAiB,GAAG,IAAI,CAc1B;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE;IAC3C,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,mBAAmB,EAAE,MAAM,CAAC;CAC7B,GAAG,OAAO,CA4BV;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,WAAW,CAAC,CAqCtB;AA6HD;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,GAChB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAmD/E;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,GACjD,MAAM,CAQR"}
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM Memory Flush Agent
|
|
3
|
+
* Extracts durable memories from session history before compaction
|
|
4
|
+
*/
|
|
5
|
+
import { DEFAULT_FLUSH_SOFT_THRESHOLD_TOKENS, DEFAULT_FLUSH_RESERVE_TOKENS_FLOOR, } from "../types.js";
|
|
6
|
+
import { DEFAULT_MEMORY_FLUSH_PROMPT, DEFAULT_MEMORY_FLUSH_SYSTEM_PROMPT, buildFlushContext, isSilentReply, generateMemoryFilename, } from "./prompts.js";
|
|
7
|
+
/**
|
|
8
|
+
* Default memory flush configuration
|
|
9
|
+
*/
|
|
10
|
+
export const DEFAULT_MEMORY_FLUSH_CONFIG = {
|
|
11
|
+
enabled: true,
|
|
12
|
+
softThresholdTokens: DEFAULT_FLUSH_SOFT_THRESHOLD_TOKENS,
|
|
13
|
+
reserveTokensFloor: DEFAULT_FLUSH_RESERVE_TOKENS_FLOOR,
|
|
14
|
+
prompt: DEFAULT_MEMORY_FLUSH_PROMPT,
|
|
15
|
+
systemPrompt: DEFAULT_MEMORY_FLUSH_SYSTEM_PROMPT,
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Resolve memory flush settings with defaults
|
|
19
|
+
*/
|
|
20
|
+
export function resolveMemoryFlushConfig(config) {
|
|
21
|
+
if (config?.enabled === false) {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
return {
|
|
25
|
+
enabled: config?.enabled ?? true,
|
|
26
|
+
softThresholdTokens: config?.softThresholdTokens ?? DEFAULT_FLUSH_SOFT_THRESHOLD_TOKENS,
|
|
27
|
+
reserveTokensFloor: config?.reserveTokensFloor ?? DEFAULT_FLUSH_RESERVE_TOKENS_FLOOR,
|
|
28
|
+
prompt: config?.prompt?.trim() || DEFAULT_MEMORY_FLUSH_PROMPT,
|
|
29
|
+
systemPrompt: config?.systemPrompt?.trim() || DEFAULT_MEMORY_FLUSH_SYSTEM_PROMPT,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Check if memory flush should run based on token thresholds
|
|
34
|
+
*/
|
|
35
|
+
export function shouldRunMemoryFlush(params) {
|
|
36
|
+
const totalTokens = params.entry?.totalTokens;
|
|
37
|
+
if (!totalTokens || totalTokens <= 0) {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
const contextWindow = Math.max(1, Math.floor(params.contextWindowTokens));
|
|
41
|
+
const reserveTokens = Math.max(0, Math.floor(params.reserveTokensFloor));
|
|
42
|
+
const softThreshold = Math.max(0, Math.floor(params.softThresholdTokens));
|
|
43
|
+
// Threshold = contextWindow - reserveTokens - softThreshold
|
|
44
|
+
const threshold = Math.max(0, contextWindow - reserveTokens - softThreshold);
|
|
45
|
+
if (threshold <= 0) {
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
if (totalTokens < threshold) {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
// Don't flush twice for same compaction cycle
|
|
52
|
+
const compactionCount = params.entry?.compactionCount ?? 0;
|
|
53
|
+
const lastFlushAt = params.entry?.memoryFlushCompactionCount;
|
|
54
|
+
if (typeof lastFlushAt === "number" && lastFlushAt === compactionCount) {
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Run the memory flush agent with LLM extraction
|
|
61
|
+
*
|
|
62
|
+
* This function either:
|
|
63
|
+
* 1. Uses a provided LLM chat function to extract memories
|
|
64
|
+
* 2. Falls back to tool-based extraction if no LLM is provided
|
|
65
|
+
*/
|
|
66
|
+
export async function runMemoryFlushAgent(params) {
|
|
67
|
+
const { sessionHistory, writeMemory, llmChat, onProgress } = params;
|
|
68
|
+
if (!sessionHistory.trim()) {
|
|
69
|
+
return {
|
|
70
|
+
success: true,
|
|
71
|
+
memoriesWritten: 0,
|
|
72
|
+
bytesWritten: 0,
|
|
73
|
+
noReply: true,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
onProgress?.("Building extraction context...");
|
|
77
|
+
// Build the context for the LLM
|
|
78
|
+
const context = buildFlushContext({
|
|
79
|
+
sessionHistory,
|
|
80
|
+
});
|
|
81
|
+
// If we have an LLM chat function, use it for extraction
|
|
82
|
+
if (llmChat) {
|
|
83
|
+
return runWithLLM({
|
|
84
|
+
context,
|
|
85
|
+
llmChat,
|
|
86
|
+
writeMemory,
|
|
87
|
+
onProgress,
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
// Fallback: Just return a prompt-based result
|
|
91
|
+
// The caller (plugin) will inject this as context
|
|
92
|
+
return {
|
|
93
|
+
success: false,
|
|
94
|
+
memoriesWritten: 0,
|
|
95
|
+
bytesWritten: 0,
|
|
96
|
+
error: "No LLM provider available for extraction",
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Run extraction with LLM chat function
|
|
101
|
+
*/
|
|
102
|
+
async function runWithLLM(params) {
|
|
103
|
+
const { context, llmChat, writeMemory, onProgress } = params;
|
|
104
|
+
onProgress?.("Extracting memories with LLM...");
|
|
105
|
+
let memoriesWritten = 0;
|
|
106
|
+
let totalBytesWritten = 0;
|
|
107
|
+
// Define the memory_write tool for the LLM
|
|
108
|
+
const memoryWriteTool = {
|
|
109
|
+
name: "memory_write",
|
|
110
|
+
description: "Write content to a memory file for durable storage. " +
|
|
111
|
+
"Content is stored as markdown and will be searchable via semantic search.",
|
|
112
|
+
parameters: {
|
|
113
|
+
type: "object",
|
|
114
|
+
properties: {
|
|
115
|
+
content: {
|
|
116
|
+
type: "string",
|
|
117
|
+
description: "The content to write (markdown format recommended)",
|
|
118
|
+
},
|
|
119
|
+
filename: {
|
|
120
|
+
type: "string",
|
|
121
|
+
description: "Filename to write to (default: YYYY-MM-DD.md based on current date)",
|
|
122
|
+
},
|
|
123
|
+
append: {
|
|
124
|
+
type: "boolean",
|
|
125
|
+
description: "If true, append to existing file (default: true)",
|
|
126
|
+
},
|
|
127
|
+
},
|
|
128
|
+
required: ["content"],
|
|
129
|
+
},
|
|
130
|
+
};
|
|
131
|
+
try {
|
|
132
|
+
// Call the LLM with tool support
|
|
133
|
+
const response = await llmChat({
|
|
134
|
+
messages: [
|
|
135
|
+
{ role: "system", content: context.systemPrompt },
|
|
136
|
+
{ role: "user", content: context.userPrompt },
|
|
137
|
+
],
|
|
138
|
+
tools: [memoryWriteTool],
|
|
139
|
+
maxTokens: 4096,
|
|
140
|
+
});
|
|
141
|
+
// Check for silent reply
|
|
142
|
+
if (response.content && isSilentReply(response.content)) {
|
|
143
|
+
onProgress?.("No memories to save (NO_REPLY)");
|
|
144
|
+
return {
|
|
145
|
+
success: true,
|
|
146
|
+
memoriesWritten: 0,
|
|
147
|
+
bytesWritten: 0,
|
|
148
|
+
noReply: true,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
// Process tool calls
|
|
152
|
+
if (response.toolCalls && response.toolCalls.length > 0) {
|
|
153
|
+
for (const toolCall of response.toolCalls) {
|
|
154
|
+
if (toolCall.name === "memory_write") {
|
|
155
|
+
const args = toolCall.arguments;
|
|
156
|
+
if (args.content) {
|
|
157
|
+
onProgress?.(`Writing memory to ${args.filename || "default file"}...`);
|
|
158
|
+
const result = await writeMemory(args.content, {
|
|
159
|
+
filename: args.filename,
|
|
160
|
+
append: args.append,
|
|
161
|
+
});
|
|
162
|
+
if (result.success) {
|
|
163
|
+
memoriesWritten++;
|
|
164
|
+
totalBytesWritten += result.bytesWritten ?? 0;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
// If LLM returned content without tool calls, treat it as memory content
|
|
171
|
+
if (response.content && !isSilentReply(response.content) && memoriesWritten === 0) {
|
|
172
|
+
onProgress?.("Writing extracted content as memory...");
|
|
173
|
+
const result = await writeMemory(response.content, {
|
|
174
|
+
filename: generateMemoryFilename(),
|
|
175
|
+
append: true,
|
|
176
|
+
});
|
|
177
|
+
if (result.success) {
|
|
178
|
+
memoriesWritten++;
|
|
179
|
+
totalBytesWritten += result.bytesWritten ?? 0;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
onProgress?.(`Flush complete: ${memoriesWritten} memories written`);
|
|
183
|
+
return {
|
|
184
|
+
success: true,
|
|
185
|
+
memoriesWritten,
|
|
186
|
+
bytesWritten: totalBytesWritten,
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
catch (error) {
|
|
190
|
+
return {
|
|
191
|
+
success: false,
|
|
192
|
+
memoriesWritten,
|
|
193
|
+
bytesWritten: totalBytesWritten,
|
|
194
|
+
error: error instanceof Error ? error.message : String(error),
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Create a simple memory write function for use with the flush agent
|
|
200
|
+
*/
|
|
201
|
+
export function createMemoryWriter(memoryDir) {
|
|
202
|
+
return async (content, options) => {
|
|
203
|
+
const { writeFile, readFile, mkdir } = await import("node:fs/promises");
|
|
204
|
+
const { join, dirname } = await import("node:path");
|
|
205
|
+
try {
|
|
206
|
+
// Determine filename
|
|
207
|
+
let filename = options?.filename?.trim();
|
|
208
|
+
if (!filename) {
|
|
209
|
+
filename = generateMemoryFilename();
|
|
210
|
+
}
|
|
211
|
+
// Ensure it's in memory subdirectory if no path specified
|
|
212
|
+
if (!filename.includes("/")) {
|
|
213
|
+
filename = `memory/${filename}`;
|
|
214
|
+
}
|
|
215
|
+
const absPath = join(memoryDir, filename);
|
|
216
|
+
// Ensure directory exists
|
|
217
|
+
await mkdir(dirname(absPath), { recursive: true });
|
|
218
|
+
// Default to append mode
|
|
219
|
+
const shouldAppend = options?.append !== false;
|
|
220
|
+
let finalContent = content;
|
|
221
|
+
if (shouldAppend) {
|
|
222
|
+
try {
|
|
223
|
+
const existing = await readFile(absPath, "utf-8");
|
|
224
|
+
// Add separator if file has content
|
|
225
|
+
if (existing.trim()) {
|
|
226
|
+
finalContent = existing.trimEnd() + "\n\n---\n\n" + content;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
catch {
|
|
230
|
+
// File doesn't exist, just use new content
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
await writeFile(absPath, finalContent, "utf-8");
|
|
234
|
+
return {
|
|
235
|
+
success: true,
|
|
236
|
+
path: filename,
|
|
237
|
+
bytesWritten: Buffer.byteLength(finalContent, "utf-8"),
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
catch (error) {
|
|
241
|
+
return {
|
|
242
|
+
success: false,
|
|
243
|
+
error: error instanceof Error ? error.message : String(error),
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Extract session history from messages for flush context
|
|
250
|
+
*/
|
|
251
|
+
export function formatSessionHistoryForFlush(messages) {
|
|
252
|
+
return messages
|
|
253
|
+
.filter((m) => m.role === "user" || m.role === "assistant")
|
|
254
|
+
.map((m) => {
|
|
255
|
+
const label = m.role === "user" ? "User" : "Assistant";
|
|
256
|
+
return `### ${label}\n${m.content}`;
|
|
257
|
+
})
|
|
258
|
+
.join("\n\n---\n\n");
|
|
259
|
+
}
|
|
260
|
+
//# sourceMappingURL=flush-agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flush-agent.js","sourceRoot":"","sources":["../../src/flush/flush-agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory flush module exports
|
|
3
|
+
*/
|
|
4
|
+
export { DEFAULT_MEMORY_FLUSH_PROMPT, DEFAULT_MEMORY_FLUSH_SYSTEM_PROMPT, buildFlushContext, isSilentReply, ensureNoReplyHint, generateMemoryFilename, } from "./prompts.js";
|
|
5
|
+
export { DEFAULT_MEMORY_FLUSH_CONFIG, resolveMemoryFlushConfig, shouldRunMemoryFlush, runMemoryFlushAgent, createMemoryWriter, formatSessionHistoryForFlush, } from "./flush-agent.js";
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/flush/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,2BAA2B,EAC3B,kCAAkC,EAClC,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,2BAA2B,EAC3B,wBAAwB,EACxB,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EAClB,4BAA4B,GAC7B,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory flush module exports
|
|
3
|
+
*/
|
|
4
|
+
export { DEFAULT_MEMORY_FLUSH_PROMPT, DEFAULT_MEMORY_FLUSH_SYSTEM_PROMPT, buildFlushContext, isSilentReply, ensureNoReplyHint, generateMemoryFilename, } from "./prompts.js";
|
|
5
|
+
export { DEFAULT_MEMORY_FLUSH_CONFIG, resolveMemoryFlushConfig, shouldRunMemoryFlush, runMemoryFlushAgent, createMemoryWriter, formatSessionHistoryForFlush, } from "./flush-agent.js";
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/flush/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,2BAA2B,EAC3B,kCAAkC,EAClC,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,2BAA2B,EAC3B,wBAAwB,EACxB,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EAClB,4BAA4B,GAC7B,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory flush prompts for LLM extraction
|
|
3
|
+
* These prompts guide the LLM to extract durable memories from session history
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Default user prompt for memory flush
|
|
7
|
+
* This is sent as the user message to trigger extraction
|
|
8
|
+
*/
|
|
9
|
+
export declare const DEFAULT_MEMORY_FLUSH_PROMPT: string;
|
|
10
|
+
/**
|
|
11
|
+
* Default system prompt for memory flush
|
|
12
|
+
* This sets up the LLM's role and behavior
|
|
13
|
+
*/
|
|
14
|
+
export declare const DEFAULT_MEMORY_FLUSH_SYSTEM_PROMPT: string;
|
|
15
|
+
/**
|
|
16
|
+
* Ensure the prompt contains the NO_REPLY hint
|
|
17
|
+
*/
|
|
18
|
+
export declare function ensureNoReplyHint(text: string): string;
|
|
19
|
+
/**
|
|
20
|
+
* Check if response indicates nothing to save
|
|
21
|
+
*/
|
|
22
|
+
export declare function isSilentReply(text: string | undefined): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Build the full context for memory extraction
|
|
25
|
+
*/
|
|
26
|
+
export declare function buildFlushContext(params: {
|
|
27
|
+
sessionHistory: string;
|
|
28
|
+
customPrompt?: string;
|
|
29
|
+
customSystemPrompt?: string;
|
|
30
|
+
}): {
|
|
31
|
+
systemPrompt: string;
|
|
32
|
+
userPrompt: string;
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Generate a default memory filename based on current date
|
|
36
|
+
*/
|
|
37
|
+
export declare function generateMemoryFilename(): string;
|
|
38
|
+
//# sourceMappingURL=prompts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/flush/prompts.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;;GAGG;AACH,eAAO,MAAM,2BAA2B,QAgBhC,CAAC;AAET;;;GAGG;AACH,eAAO,MAAM,kCAAkC,QA4BvC,CAAC;AAET;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKtD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAe/D;AASD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE;IACxC,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,GAAG;IACF,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB,CAaA;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CAM/C"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory flush prompts for LLM extraction
|
|
3
|
+
* These prompts guide the LLM to extract durable memories from session history
|
|
4
|
+
*/
|
|
5
|
+
import { SILENT_REPLY_TOKEN } from "../types.js";
|
|
6
|
+
/**
|
|
7
|
+
* Default user prompt for memory flush
|
|
8
|
+
* This is sent as the user message to trigger extraction
|
|
9
|
+
*/
|
|
10
|
+
export const DEFAULT_MEMORY_FLUSH_PROMPT = `
|
|
11
|
+
Pre-compaction memory flush.
|
|
12
|
+
|
|
13
|
+
Analyze the conversation history above and extract important information that should persist:
|
|
14
|
+
- User preferences, settings, and stated requirements
|
|
15
|
+
- Key decisions made during the session
|
|
16
|
+
- Important facts learned about the project, codebase, or domain
|
|
17
|
+
- TODOs, action items, and pending tasks
|
|
18
|
+
- Context that would be useful in future sessions
|
|
19
|
+
- Technical choices and their rationale
|
|
20
|
+
|
|
21
|
+
Write extracted memories to memory files using the memory_write tool.
|
|
22
|
+
Format memories as markdown with clear headings.
|
|
23
|
+
Each memory should be self-contained with enough context to be understood standalone.
|
|
24
|
+
|
|
25
|
+
If nothing important needs to be saved, reply with ${SILENT_REPLY_TOKEN}.
|
|
26
|
+
`.trim();
|
|
27
|
+
/**
|
|
28
|
+
* Default system prompt for memory flush
|
|
29
|
+
* This sets up the LLM's role and behavior
|
|
30
|
+
*/
|
|
31
|
+
export const DEFAULT_MEMORY_FLUSH_SYSTEM_PROMPT = `
|
|
32
|
+
You are a memory extraction agent. The session is approaching context limits and will be compacted.
|
|
33
|
+
Your job is to identify and persist durable memories before context is lost.
|
|
34
|
+
|
|
35
|
+
Guidelines:
|
|
36
|
+
- Focus on information that would be lost without explicit storage
|
|
37
|
+
- Use clear, searchable language (memories will be vector-indexed for semantic search)
|
|
38
|
+
- Include enough context for each memory to be understood standalone
|
|
39
|
+
- Organize related information together with descriptive headings
|
|
40
|
+
- Skip ephemeral information that can be easily re-derived
|
|
41
|
+
- Skip tool outputs and code that already exists in files
|
|
42
|
+
- Prioritize: user preferences > decisions > facts > context
|
|
43
|
+
|
|
44
|
+
Format memories as:
|
|
45
|
+
## [Topic or Date]
|
|
46
|
+
[Content with context]
|
|
47
|
+
|
|
48
|
+
Example:
|
|
49
|
+
## User Preferences
|
|
50
|
+
- Prefers TypeScript over JavaScript
|
|
51
|
+
- Uses pnpm as package manager
|
|
52
|
+
- Likes concise code without excessive comments
|
|
53
|
+
|
|
54
|
+
## Project Decisions (2024-01-15)
|
|
55
|
+
- Chose SQLite for storage due to zero-config deployment
|
|
56
|
+
- Using vitest for testing (faster than jest)
|
|
57
|
+
|
|
58
|
+
If no important memories need saving, reply with ${SILENT_REPLY_TOKEN}.
|
|
59
|
+
`.trim();
|
|
60
|
+
/**
|
|
61
|
+
* Ensure the prompt contains the NO_REPLY hint
|
|
62
|
+
*/
|
|
63
|
+
export function ensureNoReplyHint(text) {
|
|
64
|
+
if (text.includes(SILENT_REPLY_TOKEN)) {
|
|
65
|
+
return text;
|
|
66
|
+
}
|
|
67
|
+
return `${text}\n\nIf no user-visible reply is needed, start with ${SILENT_REPLY_TOKEN}.`;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Check if response indicates nothing to save
|
|
71
|
+
*/
|
|
72
|
+
export function isSilentReply(text) {
|
|
73
|
+
if (!text)
|
|
74
|
+
return false;
|
|
75
|
+
const trimmed = text.trim();
|
|
76
|
+
// Check if response starts with or is just the silent token
|
|
77
|
+
if (trimmed === SILENT_REPLY_TOKEN)
|
|
78
|
+
return true;
|
|
79
|
+
if (trimmed.startsWith(SILENT_REPLY_TOKEN))
|
|
80
|
+
return true;
|
|
81
|
+
// Check for token at word boundary at start
|
|
82
|
+
const prefixRegex = new RegExp(`^\\s*${escapeRegex(SILENT_REPLY_TOKEN)}(?=$|\\W)`);
|
|
83
|
+
if (prefixRegex.test(text))
|
|
84
|
+
return true;
|
|
85
|
+
// Check for token at end
|
|
86
|
+
const suffixRegex = new RegExp(`\\b${escapeRegex(SILENT_REPLY_TOKEN)}\\b\\W*$`);
|
|
87
|
+
return suffixRegex.test(text);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Escape special regex characters
|
|
91
|
+
*/
|
|
92
|
+
function escapeRegex(str) {
|
|
93
|
+
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Build the full context for memory extraction
|
|
97
|
+
*/
|
|
98
|
+
export function buildFlushContext(params) {
|
|
99
|
+
const systemPrompt = ensureNoReplyHint(params.customSystemPrompt ?? DEFAULT_MEMORY_FLUSH_SYSTEM_PROMPT);
|
|
100
|
+
const userPrompt = ensureNoReplyHint(params.customPrompt ?? DEFAULT_MEMORY_FLUSH_PROMPT);
|
|
101
|
+
return {
|
|
102
|
+
systemPrompt,
|
|
103
|
+
userPrompt: `## Session History\n\n${params.sessionHistory}\n\n---\n\n${userPrompt}`,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Generate a default memory filename based on current date
|
|
108
|
+
*/
|
|
109
|
+
export function generateMemoryFilename() {
|
|
110
|
+
const now = new Date();
|
|
111
|
+
const yyyy = now.getFullYear();
|
|
112
|
+
const mm = String(now.getMonth() + 1).padStart(2, "0");
|
|
113
|
+
const dd = String(now.getDate()).padStart(2, "0");
|
|
114
|
+
return `memory/${yyyy}-${mm}-${dd}.md`;
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=prompts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/flush/prompts.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD;;;GAGG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG;;;;;;;;;;;;;;;qDAeU,kBAAkB;CACtE,CAAC,IAAI,EAAE,CAAC;AAET;;;GAGG;AACH,MAAM,CAAC,MAAM,kCAAkC,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;mDA2BC,kBAAkB;CACpE,CAAC,IAAI,EAAE,CAAC;AAET;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,IAAI,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACtC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,GAAG,IAAI,sDAAsD,kBAAkB,GAAG,CAAC;AAC5F,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,IAAwB;IACpD,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IACxB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAE5B,4DAA4D;IAC5D,IAAI,OAAO,KAAK,kBAAkB;QAAE,OAAO,IAAI,CAAC;IAChD,IAAI,OAAO,CAAC,UAAU,CAAC,kBAAkB,CAAC;QAAE,OAAO,IAAI,CAAC;IAExD,4CAA4C;IAC5C,MAAM,WAAW,GAAG,IAAI,MAAM,CAAC,QAAQ,WAAW,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;IACnF,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAExC,yBAAyB;IACzB,MAAM,WAAW,GAAG,IAAI,MAAM,CAAC,MAAM,WAAW,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAChF,OAAO,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC;AAED;;GAEG;AACH,SAAS,WAAW,CAAC,GAAW;IAC9B,OAAO,GAAG,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AACpD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAIjC;IAIC,MAAM,YAAY,GAAG,iBAAiB,CACpC,MAAM,CAAC,kBAAkB,IAAI,kCAAkC,CAChE,CAAC;IAEF,MAAM,UAAU,GAAG,iBAAiB,CAClC,MAAM,CAAC,YAAY,IAAI,2BAA2B,CACnD,CAAC;IAEF,OAAO;QACL,YAAY;QACZ,UAAU,EAAE,yBAAyB,MAAM,CAAC,cAAc,cAAc,UAAU,EAAE;KACrF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB;IACpC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IAC/B,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACvD,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAClD,OAAO,UAAU,IAAI,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC;AACzC,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export type { MemoryConfig, MemorySearchResult, SearchOptions, MemoryFileEntry, MemoryChunk, StoredChunk, MemorySource, VectorSearchResult, KeywordSearchResult, HybridSearchOptions, MemorySearchParams, MemoryGetParams, MemorySearchResponse, MemoryGetResponse, MemoryIndexMeta, FileChangeEvent, SessionEvent, EmbeddingProviderType, SyncProgress, MemoryStatus, ProbeResult, SessionChunk, SessionFileState, BatchConfig, BatchJob, ExtendedMemoryConfig, ExtendedBatchConfig, OpenAiBatchRequest, OpenAiBatchStatus, OpenAiBatchOutputLine, GeminiBatchRequest, GeminiBatchStatus, GeminiBatchOutputLine, OpenAiEmbeddingClient, GeminiEmbeddingClient, } from "./types.js";
|
|
2
|
-
export { DEFAULT_CONFIG, BATCH_FAILURE_LIMIT, SESSION_DIRTY_DEBOUNCE_MS, EMBEDDING_RETRY_MAX_ATTEMPTS, EMBEDDING_RETRY_BASE_DELAY_MS, EMBEDDING_RETRY_MAX_DELAY_MS, OPENAI_BATCH_MAX_REQUESTS, GEMINI_BATCH_MAX_REQUESTS, OPENAI_BATCH_ENDPOINT, OPENAI_BATCH_COMPLETION_WINDOW, } from "./types.js";
|
|
1
|
+
export type { MemoryConfig, MemorySearchResult, SearchOptions, MemoryFileEntry, MemoryChunk, StoredChunk, MemorySource, VectorSearchResult, KeywordSearchResult, HybridSearchOptions, MemorySearchParams, MemoryGetParams, MemorySearchResponse, MemoryGetResponse, MemoryIndexMeta, FileChangeEvent, SessionEvent, EmbeddingProviderType, SyncProgress, MemoryStatus, ProbeResult, SessionChunk, SessionFileState, BatchConfig, BatchJob, ExtendedMemoryConfig, ExtendedBatchConfig, OpenAiBatchRequest, OpenAiBatchStatus, OpenAiBatchOutputLine, GeminiBatchRequest, GeminiBatchStatus, GeminiBatchOutputLine, OpenAiEmbeddingClient, GeminiEmbeddingClient, MemoryFlushConfig, FlushAgentParams, FlushResult, MemoryWriteOptions, MemoryWriteResult, FlushSessionEntry, LLMChatParams, LLMChatResponse, LLMTool, OpenCodeMessage, OpenCodeContentPart, OpenCodeSessionEntry, SessionFormat, ExtendedSyncConfig, SessionSyncConfig, } from "./types.js";
|
|
2
|
+
export { DEFAULT_CONFIG, BATCH_FAILURE_LIMIT, SESSION_DIRTY_DEBOUNCE_MS, EMBEDDING_RETRY_MAX_ATTEMPTS, EMBEDDING_RETRY_BASE_DELAY_MS, EMBEDDING_RETRY_MAX_DELAY_MS, OPENAI_BATCH_MAX_REQUESTS, GEMINI_BATCH_MAX_REQUESTS, OPENAI_BATCH_ENDPOINT, OPENAI_BATCH_COMPLETION_WINDOW, DEFAULT_FLUSH_SOFT_THRESHOLD_TOKENS, DEFAULT_FLUSH_RESERVE_TOKENS_FLOOR, SILENT_REPLY_TOKEN, } from "./types.js";
|
|
3
3
|
export { MemoryManager } from "./memory-manager.js";
|
|
4
4
|
export { memorySearch, memoryGet, createMemorySearchToolDef, createMemoryGetToolDef, } from "./tools/index.js";
|
|
5
5
|
export type { EmbeddingProvider, EmbeddingProviderResult, ProviderConfig } from "./providers/index.js";
|
|
@@ -12,6 +12,8 @@ export { FileWatcher, type FileWatcherOptions } from "./sync/index.js";
|
|
|
12
12
|
export { SessionMonitor, type SessionMonitorOptions } from "./sync/index.js";
|
|
13
13
|
export { minimatch } from "./sync/index.js";
|
|
14
14
|
export { onSessionTranscriptUpdate, emitSessionTranscriptUpdate, getSessionListenerCount, type SessionTranscriptUpdate, type SessionTranscriptListener, } from "./sync/index.js";
|
|
15
|
+
export { scanOpenCodeSessions, buildOpenCodeSessionEntry, extractOpenCodeText, getOpenCodeSessionHistory, watchOpenCodeSessions, } from "./sync/index.js";
|
|
16
|
+
export { DEFAULT_MEMORY_FLUSH_PROMPT, DEFAULT_MEMORY_FLUSH_SYSTEM_PROMPT, DEFAULT_MEMORY_FLUSH_CONFIG, buildFlushContext, isSilentReply, ensureNoReplyHint, generateMemoryFilename, resolveMemoryFlushConfig, shouldRunMemoryFlush, runMemoryFlushAgent, createMemoryWriter, formatSessionHistoryForFlush, } from "./flush/index.js";
|
|
15
17
|
export { searchVector, searchVectorWithSqliteVec, syncVectorTable, searchFts, mergeHybridResults, buildFtsQuery, bm25RankToScore, } from "./search/index.js";
|
|
16
18
|
export { hashText, hashFile } from "./utils/index.js";
|
|
17
19
|
export { retry, RetryError, type RetryOptions } from "./utils/index.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,YAAY,EACV,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,eAAe,EACf,WAAW,EACX,WAAW,EACX,YAAY,EACZ,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,oBAAoB,EACpB,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,YAAY,EACZ,qBAAqB,EAErB,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,QAAQ,EACR,oBAAoB,EAEpB,mBAAmB,EAEnB,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EAErB,qBAAqB,EACrB,qBAAqB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
// Main exports for @vibestudio/memory
|
|
2
2
|
export { DEFAULT_CONFIG,
|
|
3
3
|
// Constants
|
|
4
|
-
BATCH_FAILURE_LIMIT, SESSION_DIRTY_DEBOUNCE_MS, EMBEDDING_RETRY_MAX_ATTEMPTS, EMBEDDING_RETRY_BASE_DELAY_MS, EMBEDDING_RETRY_MAX_DELAY_MS, OPENAI_BATCH_MAX_REQUESTS, GEMINI_BATCH_MAX_REQUESTS, OPENAI_BATCH_ENDPOINT, OPENAI_BATCH_COMPLETION_WINDOW,
|
|
4
|
+
BATCH_FAILURE_LIMIT, SESSION_DIRTY_DEBOUNCE_MS, EMBEDDING_RETRY_MAX_ATTEMPTS, EMBEDDING_RETRY_BASE_DELAY_MS, EMBEDDING_RETRY_MAX_DELAY_MS, OPENAI_BATCH_MAX_REQUESTS, GEMINI_BATCH_MAX_REQUESTS, OPENAI_BATCH_ENDPOINT, OPENAI_BATCH_COMPLETION_WINDOW,
|
|
5
|
+
// Flush constants
|
|
6
|
+
DEFAULT_FLUSH_SOFT_THRESHOLD_TOKENS, DEFAULT_FLUSH_RESERVE_TOKENS_FLOOR, SILENT_REPLY_TOKEN, } from "./types.js";
|
|
5
7
|
// Memory Manager
|
|
6
8
|
export { MemoryManager } from "./memory-manager.js";
|
|
7
9
|
// Tools
|
|
@@ -20,6 +22,9 @@ export { FileWatcher } from "./sync/index.js";
|
|
|
20
22
|
export { SessionMonitor } from "./sync/index.js";
|
|
21
23
|
export { minimatch } from "./sync/index.js";
|
|
22
24
|
export { onSessionTranscriptUpdate, emitSessionTranscriptUpdate, getSessionListenerCount, } from "./sync/index.js";
|
|
25
|
+
export { scanOpenCodeSessions, buildOpenCodeSessionEntry, extractOpenCodeText, getOpenCodeSessionHistory, watchOpenCodeSessions, } from "./sync/index.js";
|
|
26
|
+
// Flush module
|
|
27
|
+
export { DEFAULT_MEMORY_FLUSH_PROMPT, DEFAULT_MEMORY_FLUSH_SYSTEM_PROMPT, DEFAULT_MEMORY_FLUSH_CONFIG, buildFlushContext, isSilentReply, ensureNoReplyHint, generateMemoryFilename, resolveMemoryFlushConfig, shouldRunMemoryFlush, runMemoryFlushAgent, createMemoryWriter, formatSessionHistoryForFlush, } from "./flush/index.js";
|
|
23
28
|
// Search
|
|
24
29
|
export { searchVector, searchVectorWithSqliteVec, syncVectorTable, searchFts, mergeHybridResults, buildFtsQuery, bm25RankToScore, } from "./search/index.js";
|
|
25
30
|
// Utilities
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,sCAAsC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/memory-manager.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { MemoryConfig, MemorySearchResult, SearchOptions, MemoryFileEntry, MemorySource, MemoryStatus, ProbeResult, ExtendedMemoryConfig } from "./types.js";
|
|
1
|
+
import type { MemoryConfig, MemorySearchResult, SearchOptions, MemoryFileEntry, MemorySource, MemoryStatus, ProbeResult, ExtendedMemoryConfig, MemoryWriteOptions, MemoryWriteResult, FlushResult, MemoryFlushConfig, LLMChatParams, LLMChatResponse } from "./types.js";
|
|
2
2
|
/**
|
|
3
3
|
* Memory manager for indexing and searching workspace content
|
|
4
4
|
*/
|
|
@@ -267,5 +267,42 @@ export declare class MemoryManager {
|
|
|
267
267
|
* Mark session files as dirty (for external triggers)
|
|
268
268
|
*/
|
|
269
269
|
markSessionsDirty(files?: string[]): void;
|
|
270
|
+
/**
|
|
271
|
+
* Sync OpenCode format sessions (JSON files per message)
|
|
272
|
+
*/
|
|
273
|
+
private syncOpenCodeSessions;
|
|
274
|
+
/**
|
|
275
|
+
* Index a single OpenCode session
|
|
276
|
+
*/
|
|
277
|
+
private indexOpenCodeSession;
|
|
278
|
+
/**
|
|
279
|
+
* Get session history for a specific session (for flush context)
|
|
280
|
+
*/
|
|
281
|
+
getSessionHistory(sessionId: string, options?: {
|
|
282
|
+
maxMessages?: number;
|
|
283
|
+
}): Promise<string>;
|
|
284
|
+
/**
|
|
285
|
+
* Write content to a memory file
|
|
286
|
+
* This is the primary method for durable memory storage
|
|
287
|
+
*/
|
|
288
|
+
writeMemory(content: string, options?: MemoryWriteOptions): Promise<MemoryWriteResult>;
|
|
289
|
+
/**
|
|
290
|
+
* Flush memories from session history using LLM extraction
|
|
291
|
+
*
|
|
292
|
+
* @param params.sessionHistory - Full session history text (optional, will fetch if not provided)
|
|
293
|
+
* @param params.sessionId - Session ID to fetch history from (if sessionHistory not provided)
|
|
294
|
+
* @param params.llmChat - LLM chat function for extraction
|
|
295
|
+
* @param params.onProgress - Progress callback
|
|
296
|
+
*/
|
|
297
|
+
flushMemories(params?: {
|
|
298
|
+
sessionHistory?: string;
|
|
299
|
+
sessionId?: string;
|
|
300
|
+
llmChat?: (params: LLMChatParams) => Promise<LLMChatResponse>;
|
|
301
|
+
onProgress?: (status: string) => void;
|
|
302
|
+
}): Promise<FlushResult>;
|
|
303
|
+
/**
|
|
304
|
+
* Get flush configuration
|
|
305
|
+
*/
|
|
306
|
+
getFlushConfig(): MemoryFlushConfig | null;
|
|
270
307
|
}
|
|
271
308
|
//# sourceMappingURL=memory-manager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-manager.d.ts","sourceRoot":"","sources":["../src/memory-manager.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,eAAe,EACf,YAAY,EAEZ,YAAY,EACZ,WAAW,EACX,oBAAoB,
|
|
1
|
+
{"version":3,"file":"memory-manager.d.ts","sourceRoot":"","sources":["../src/memory-manager.ts"],"names":[],"mappings":"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"}
|