@agent-relay/memory 0.1.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/adapters/index.d.ts +8 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +8 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/inmemory.d.ts +59 -0
- package/dist/adapters/inmemory.d.ts.map +1 -0
- package/dist/adapters/inmemory.js +195 -0
- package/dist/adapters/inmemory.js.map +1 -0
- package/dist/adapters/supermemory.d.ts +71 -0
- package/dist/adapters/supermemory.d.ts.map +1 -0
- package/dist/adapters/supermemory.js +338 -0
- package/dist/adapters/supermemory.js.map +1 -0
- package/dist/context-compaction.d.ts +156 -0
- package/dist/context-compaction.d.ts.map +1 -0
- package/dist/context-compaction.js +453 -0
- package/dist/context-compaction.js.map +1 -0
- package/dist/factory.d.ts +48 -0
- package/dist/factory.d.ts.map +1 -0
- package/dist/factory.js +143 -0
- package/dist/factory.js.map +1 -0
- package/dist/index.d.ts +33 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +33 -0
- package/dist/index.js.map +1 -0
- package/dist/memory-hooks.d.ts +60 -0
- package/dist/memory-hooks.d.ts.map +1 -0
- package/dist/memory-hooks.js +313 -0
- package/dist/memory-hooks.js.map +1 -0
- package/dist/service.d.ts +49 -0
- package/dist/service.d.ts.map +1 -0
- package/dist/service.js +146 -0
- package/dist/service.js.map +1 -0
- package/dist/types.d.ts +195 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -0
- package/package.json +35 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Relay Memory System
|
|
3
|
+
*
|
|
4
|
+
* Provides semantic memory storage and retrieval with multiple backend support.
|
|
5
|
+
* Memory adapters can be used standalone or integrated with the hooks system.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { createMemoryAdapter } from 'agent-relay/memory';
|
|
10
|
+
*
|
|
11
|
+
* // Create an in-memory adapter for testing
|
|
12
|
+
* const memory = await createMemoryAdapter({ type: 'inmemory' });
|
|
13
|
+
*
|
|
14
|
+
* // Or use supermemory.ai for production
|
|
15
|
+
* const memory = await createMemoryAdapter({
|
|
16
|
+
* type: 'supermemory',
|
|
17
|
+
* apiKey: process.env.SUPERMEMORY_API_KEY,
|
|
18
|
+
* });
|
|
19
|
+
*
|
|
20
|
+
* // Add a memory
|
|
21
|
+
* await memory.add('User prefers TypeScript', { tags: ['preference'] });
|
|
22
|
+
*
|
|
23
|
+
* // Search for relevant memories
|
|
24
|
+
* const results = await memory.search({ query: 'programming language' });
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export * from './types.js';
|
|
28
|
+
export * from './adapters/index.js';
|
|
29
|
+
export { createMemoryAdapter, getMemoryConfigFromEnv } from './factory.js';
|
|
30
|
+
export { createMemoryService } from './service.js';
|
|
31
|
+
export { createMemoryHooks, getMemoryHooks } from './memory-hooks.js';
|
|
32
|
+
export * from './context-compaction.js';
|
|
33
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACtE,cAAc,yBAAyB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Relay Memory System
|
|
3
|
+
*
|
|
4
|
+
* Provides semantic memory storage and retrieval with multiple backend support.
|
|
5
|
+
* Memory adapters can be used standalone or integrated with the hooks system.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { createMemoryAdapter } from 'agent-relay/memory';
|
|
10
|
+
*
|
|
11
|
+
* // Create an in-memory adapter for testing
|
|
12
|
+
* const memory = await createMemoryAdapter({ type: 'inmemory' });
|
|
13
|
+
*
|
|
14
|
+
* // Or use supermemory.ai for production
|
|
15
|
+
* const memory = await createMemoryAdapter({
|
|
16
|
+
* type: 'supermemory',
|
|
17
|
+
* apiKey: process.env.SUPERMEMORY_API_KEY,
|
|
18
|
+
* });
|
|
19
|
+
*
|
|
20
|
+
* // Add a memory
|
|
21
|
+
* await memory.add('User prefers TypeScript', { tags: ['preference'] });
|
|
22
|
+
*
|
|
23
|
+
* // Search for relevant memories
|
|
24
|
+
* const results = await memory.search({ query: 'programming language' });
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export * from './types.js';
|
|
28
|
+
export * from './adapters/index.js';
|
|
29
|
+
export { createMemoryAdapter, getMemoryConfigFromEnv } from './factory.js';
|
|
30
|
+
export { createMemoryService } from './service.js';
|
|
31
|
+
export { createMemoryHooks, getMemoryHooks } from './memory-hooks.js';
|
|
32
|
+
export * from './context-compaction.js';
|
|
33
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACtE,cAAc,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Hooks
|
|
3
|
+
*
|
|
4
|
+
* Provides memory-aware lifecycle hooks that automatically:
|
|
5
|
+
* - Load relevant context on session start
|
|
6
|
+
* - Prompt for memory save on session end
|
|
7
|
+
* - Handle @memory: pattern output
|
|
8
|
+
*/
|
|
9
|
+
import type { LifecycleHooks } from '@agent-relay/hooks';
|
|
10
|
+
import type { MemoryAdapter, MemoryConfig } from './types.js';
|
|
11
|
+
/**
|
|
12
|
+
* Options for memory hooks
|
|
13
|
+
*/
|
|
14
|
+
export interface MemoryHooksOptions {
|
|
15
|
+
/** Pre-configured memory adapter */
|
|
16
|
+
adapter?: MemoryAdapter;
|
|
17
|
+
/** Configuration for creating a new adapter */
|
|
18
|
+
config?: Partial<MemoryConfig>;
|
|
19
|
+
/** Agent ID for memory operations */
|
|
20
|
+
agentId?: string;
|
|
21
|
+
/** Project ID for memory operations */
|
|
22
|
+
projectId?: string;
|
|
23
|
+
/** Whether to inject relevant memories on session start */
|
|
24
|
+
injectOnStart?: boolean;
|
|
25
|
+
/** Maximum memories to inject on start */
|
|
26
|
+
maxStartMemories?: number;
|
|
27
|
+
/** Search query for session start (default: project-based) */
|
|
28
|
+
startSearchQuery?: string;
|
|
29
|
+
/** Whether to prompt for memory save on session end */
|
|
30
|
+
promptOnEnd?: boolean;
|
|
31
|
+
/** Whether to auto-save important learnings from output */
|
|
32
|
+
autoSave?: boolean;
|
|
33
|
+
/** Whether to auto-save session summary on graceful end */
|
|
34
|
+
autoSaveOnEnd?: boolean;
|
|
35
|
+
/** Patterns that indicate content worth saving */
|
|
36
|
+
savePatterns?: RegExp[];
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Create memory hooks for automatic context loading and saving
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* ```typescript
|
|
43
|
+
* const hooks = createMemoryHooks({
|
|
44
|
+
* config: { type: 'supermemory', apiKey: 'xxx' },
|
|
45
|
+
* agentId: 'my-agent',
|
|
46
|
+
* projectId: 'my-project',
|
|
47
|
+
* });
|
|
48
|
+
*
|
|
49
|
+
* registry.registerLifecycleHooks(hooks);
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
52
|
+
export declare function createMemoryHooks(options?: MemoryHooksOptions): LifecycleHooks;
|
|
53
|
+
/**
|
|
54
|
+
* Get memory hooks with default settings
|
|
55
|
+
*
|
|
56
|
+
* @param agentId - Agent identifier
|
|
57
|
+
* @param projectId - Project identifier
|
|
58
|
+
*/
|
|
59
|
+
export declare function getMemoryHooks(agentId: string, projectId: string): LifecycleHooks;
|
|
60
|
+
//# sourceMappingURL=memory-hooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-hooks.d.ts","sourceRoot":"","sources":["../src/memory-hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,cAAc,EAKf,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EAEb,MAAM,YAAY,CAAC;AAGpB;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,oCAAoC;IACpC,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,+CAA+C;IAC/C,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAC/B,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uCAAuC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2DAA2D;IAC3D,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,0CAA0C;IAC1C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,8DAA8D;IAC9D,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,uDAAuD;IACvD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,2DAA2D;IAC3D,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,kDAAkD;IAClD,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAuDD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,kBAAuB,GAAG,cAAc,CAwBlF;AAmQD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,cAAc,CAEjF"}
|
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Hooks
|
|
3
|
+
*
|
|
4
|
+
* Provides memory-aware lifecycle hooks that automatically:
|
|
5
|
+
* - Load relevant context on session start
|
|
6
|
+
* - Prompt for memory save on session end
|
|
7
|
+
* - Handle @memory: pattern output
|
|
8
|
+
*/
|
|
9
|
+
import { createMemoryAdapter } from './factory.js';
|
|
10
|
+
/**
|
|
11
|
+
* Default patterns that indicate content worth auto-saving
|
|
12
|
+
*
|
|
13
|
+
* Categories:
|
|
14
|
+
* - Learnings: discoveries, realizations, insights
|
|
15
|
+
* - Decisions: significant choices made
|
|
16
|
+
* - Breakthroughs: problems solved, aha moments
|
|
17
|
+
* - Failures: things that went wrong, errors encountered
|
|
18
|
+
* - Preferences: user/project preferences
|
|
19
|
+
* - Retrospectives: end-of-task reflections
|
|
20
|
+
*/
|
|
21
|
+
const DEFAULT_SAVE_PATTERNS = [
|
|
22
|
+
// Learnings and discoveries
|
|
23
|
+
/(?:learned|discovered|found out|realized|important|remember|note to self)/i,
|
|
24
|
+
/(?:key insight|takeaway|lesson learned|now I understand)/i,
|
|
25
|
+
// Significant decisions
|
|
26
|
+
/(?:decided to|decision:|chose to|going with|settled on|approach:|strategy:)/i,
|
|
27
|
+
/(?:trade-?off|weighing|considering|opting for)/i,
|
|
28
|
+
// Breakthroughs and solutions
|
|
29
|
+
/(?:breakthrough|finally|solved|figured out|the fix was|root cause)/i,
|
|
30
|
+
/(?:aha|eureka|that's why|the issue was|problem was)/i,
|
|
31
|
+
// Failures and problems
|
|
32
|
+
/(?:failed because|mistake was|should have|shouldn't have|next time)/i,
|
|
33
|
+
/(?:went wrong|broke because|error was due to|caused by)/i,
|
|
34
|
+
/(?:avoid|don't repeat|pitfall|gotcha|watch out)/i,
|
|
35
|
+
// User/project preferences
|
|
36
|
+
/(?:user prefers?|preference|always use|never use|don't use)/i,
|
|
37
|
+
/(?:project uses?|codebase uses?|this repo|this project)/i,
|
|
38
|
+
/(?:convention|pattern|style guide|best practice)/i,
|
|
39
|
+
// Retrospectives
|
|
40
|
+
/(?:in retrospect|looking back|reflecting|summary:|recap:)/i,
|
|
41
|
+
/(?:what worked|what didn't|improvements for next time)/i,
|
|
42
|
+
];
|
|
43
|
+
/**
|
|
44
|
+
* Create memory hooks for automatic context loading and saving
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* ```typescript
|
|
48
|
+
* const hooks = createMemoryHooks({
|
|
49
|
+
* config: { type: 'supermemory', apiKey: 'xxx' },
|
|
50
|
+
* agentId: 'my-agent',
|
|
51
|
+
* projectId: 'my-project',
|
|
52
|
+
* });
|
|
53
|
+
*
|
|
54
|
+
* registry.registerLifecycleHooks(hooks);
|
|
55
|
+
* ```
|
|
56
|
+
*/
|
|
57
|
+
export function createMemoryHooks(options = {}) {
|
|
58
|
+
const state = {
|
|
59
|
+
adapter: options.adapter ?? null,
|
|
60
|
+
adapterPromise: null,
|
|
61
|
+
sessionLearnings: [],
|
|
62
|
+
options: {
|
|
63
|
+
agentId: options.agentId ?? 'default',
|
|
64
|
+
projectId: options.projectId ?? 'default',
|
|
65
|
+
injectOnStart: options.injectOnStart ?? true,
|
|
66
|
+
maxStartMemories: options.maxStartMemories ?? 5,
|
|
67
|
+
startSearchQuery: options.startSearchQuery ?? '',
|
|
68
|
+
promptOnEnd: options.promptOnEnd ?? false,
|
|
69
|
+
autoSave: options.autoSave ?? true,
|
|
70
|
+
autoSaveOnEnd: options.autoSaveOnEnd ?? true,
|
|
71
|
+
savePatterns: options.savePatterns ?? DEFAULT_SAVE_PATTERNS,
|
|
72
|
+
config: options.config,
|
|
73
|
+
},
|
|
74
|
+
};
|
|
75
|
+
return {
|
|
76
|
+
onSessionStart: createSessionStartHook(state),
|
|
77
|
+
onSessionEnd: createSessionEndHook(state),
|
|
78
|
+
onOutput: createOutputHook(state),
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Lazily get or create the memory adapter
|
|
83
|
+
*/
|
|
84
|
+
async function getAdapter(state) {
|
|
85
|
+
if (state.adapter) {
|
|
86
|
+
return state.adapter;
|
|
87
|
+
}
|
|
88
|
+
if (!state.adapterPromise) {
|
|
89
|
+
state.adapterPromise = createMemoryAdapter({
|
|
90
|
+
...state.options.config,
|
|
91
|
+
defaultAgentId: state.options.agentId,
|
|
92
|
+
defaultProjectId: state.options.projectId,
|
|
93
|
+
}).catch(error => {
|
|
94
|
+
console.error('[memory-hooks] Failed to create adapter:', error);
|
|
95
|
+
return null;
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
state.adapter = await state.adapterPromise;
|
|
99
|
+
return state.adapter;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Session start hook - loads relevant memories
|
|
103
|
+
*/
|
|
104
|
+
function createSessionStartHook(state) {
|
|
105
|
+
return async (ctx) => {
|
|
106
|
+
if (!state.options.injectOnStart) {
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
state.sessionId = ctx.sessionId;
|
|
110
|
+
const adapter = await getAdapter(state);
|
|
111
|
+
if (!adapter) {
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
try {
|
|
115
|
+
// Build search query based on context
|
|
116
|
+
const searchQuery = state.options.startSearchQuery ||
|
|
117
|
+
`project: ${ctx.workingDir} OR agent: ${state.options.agentId}`;
|
|
118
|
+
const memories = await adapter.search({
|
|
119
|
+
query: searchQuery,
|
|
120
|
+
limit: state.options.maxStartMemories,
|
|
121
|
+
agentId: state.options.agentId,
|
|
122
|
+
projectId: state.options.projectId,
|
|
123
|
+
});
|
|
124
|
+
if (memories.length === 0) {
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
const formattedMemories = formatMemoriesForInjection(memories);
|
|
128
|
+
return {
|
|
129
|
+
inject: `\n[CONTEXT FROM MEMORY]\n${formattedMemories}\n`,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
catch (error) {
|
|
133
|
+
console.error('[memory-hooks] Failed to load memories:', error);
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Session end hook - logs learnings summary and optionally prompts for more
|
|
139
|
+
*/
|
|
140
|
+
function createSessionEndHook(state) {
|
|
141
|
+
return async (ctx) => {
|
|
142
|
+
// Log session summary (learnings were already saved immediately during output)
|
|
143
|
+
if (state.options.autoSaveOnEnd && ctx.graceful && state.sessionLearnings.length > 0) {
|
|
144
|
+
const uniqueLearnings = [...new Set(state.sessionLearnings)];
|
|
145
|
+
console.log(`[memory-hooks] Session captured ${uniqueLearnings.length} learnings (saved during session)`);
|
|
146
|
+
// Clear for next session
|
|
147
|
+
state.sessionLearnings = [];
|
|
148
|
+
}
|
|
149
|
+
// Optional prompt for additional saves
|
|
150
|
+
if (state.options.promptOnEnd && ctx.graceful) {
|
|
151
|
+
return {
|
|
152
|
+
inject: `
|
|
153
|
+
[SESSION ENDING]
|
|
154
|
+
If you learned anything important, save it for future sessions:
|
|
155
|
+
@memory:save <what you learned>
|
|
156
|
+
|
|
157
|
+
Examples:
|
|
158
|
+
@memory:save User prefers TypeScript over JavaScript
|
|
159
|
+
@memory:save This project uses Prisma for database access
|
|
160
|
+
@memory:save Auth tokens stored in httpOnly cookies
|
|
161
|
+
`,
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Output hook - handles @memory: patterns and auto-save
|
|
168
|
+
*/
|
|
169
|
+
function createOutputHook(state) {
|
|
170
|
+
return async (ctx) => {
|
|
171
|
+
const { content } = ctx;
|
|
172
|
+
// Handle @memory: patterns (explicit saves)
|
|
173
|
+
const memoryMatch = content.match(/@memory:(\w+)\s+(.+)/);
|
|
174
|
+
if (memoryMatch) {
|
|
175
|
+
const [, action, payload] = memoryMatch;
|
|
176
|
+
return handleMemoryCommand(state, action, payload.trim());
|
|
177
|
+
}
|
|
178
|
+
// Auto-detect and save learnings
|
|
179
|
+
if (state.options.autoSave) {
|
|
180
|
+
for (const pattern of state.options.savePatterns) {
|
|
181
|
+
if (pattern.test(content)) {
|
|
182
|
+
// Extract the relevant sentence/phrase
|
|
183
|
+
const relevantContent = extractRelevantContent(content, pattern);
|
|
184
|
+
if (relevantContent && relevantContent.length > 10) {
|
|
185
|
+
// Collect for session-end retrospective
|
|
186
|
+
if (state.options.autoSaveOnEnd) {
|
|
187
|
+
state.sessionLearnings.push(relevantContent);
|
|
188
|
+
}
|
|
189
|
+
// Also save immediately (ensures persistence even on crash)
|
|
190
|
+
const adapter = await getAdapter(state);
|
|
191
|
+
if (adapter) {
|
|
192
|
+
await adapter.add(relevantContent, {
|
|
193
|
+
source: 'auto-detected',
|
|
194
|
+
sessionId: state.sessionId,
|
|
195
|
+
tags: ['auto-saved'],
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
break;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Handle @memory: commands
|
|
207
|
+
*/
|
|
208
|
+
async function handleMemoryCommand(state, action, payload) {
|
|
209
|
+
const adapter = await getAdapter(state);
|
|
210
|
+
if (!adapter) {
|
|
211
|
+
return { inject: '[memory] Memory service not available' };
|
|
212
|
+
}
|
|
213
|
+
switch (action.toLowerCase()) {
|
|
214
|
+
case 'save':
|
|
215
|
+
case 'add': {
|
|
216
|
+
const result = await adapter.add(payload, {
|
|
217
|
+
source: 'agent-command',
|
|
218
|
+
sessionId: state.sessionId,
|
|
219
|
+
});
|
|
220
|
+
if (result.success) {
|
|
221
|
+
return { inject: `[memory] Saved: "${truncate(payload, 50)}"` };
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
return { inject: `[memory] Failed to save: ${result.error}` };
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
case 'search':
|
|
228
|
+
case 'find':
|
|
229
|
+
case 'recall': {
|
|
230
|
+
const memories = await adapter.search({
|
|
231
|
+
query: payload,
|
|
232
|
+
limit: 5,
|
|
233
|
+
});
|
|
234
|
+
if (memories.length === 0) {
|
|
235
|
+
return { inject: '[memory] No relevant memories found' };
|
|
236
|
+
}
|
|
237
|
+
const formatted = formatMemoriesForInjection(memories);
|
|
238
|
+
return { inject: `[memory] Found ${memories.length} memories:\n${formatted}` };
|
|
239
|
+
}
|
|
240
|
+
case 'forget':
|
|
241
|
+
case 'delete': {
|
|
242
|
+
const result = await adapter.delete(payload);
|
|
243
|
+
if (result.success) {
|
|
244
|
+
return { inject: `[memory] Deleted memory: ${payload}` };
|
|
245
|
+
}
|
|
246
|
+
else {
|
|
247
|
+
return { inject: `[memory] Failed to delete: ${result.error}` };
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
case 'list': {
|
|
251
|
+
if (!adapter.list) {
|
|
252
|
+
return { inject: '[memory] List not supported by this adapter' };
|
|
253
|
+
}
|
|
254
|
+
const limit = parseInt(payload) || 10;
|
|
255
|
+
const memories = await adapter.list({ limit });
|
|
256
|
+
if (memories.length === 0) {
|
|
257
|
+
return { inject: '[memory] No memories stored' };
|
|
258
|
+
}
|
|
259
|
+
const formatted = formatMemoriesForInjection(memories);
|
|
260
|
+
return { inject: `[memory] Recent memories:\n${formatted}` };
|
|
261
|
+
}
|
|
262
|
+
default:
|
|
263
|
+
return {
|
|
264
|
+
inject: `[memory] Unknown action: ${action}. Use: save, search, forget, list`,
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Format memories for injection into agent context
|
|
270
|
+
*/
|
|
271
|
+
function formatMemoriesForInjection(memories) {
|
|
272
|
+
return memories
|
|
273
|
+
.map((m, i) => {
|
|
274
|
+
const score = m.score ? ` (relevance: ${Math.round(m.score * 100)}%)` : '';
|
|
275
|
+
const tags = m.tags?.length ? ` [${m.tags.join(', ')}]` : '';
|
|
276
|
+
return `${i + 1}. ${m.content}${tags}${score}`;
|
|
277
|
+
})
|
|
278
|
+
.join('\n');
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Extract relevant content around a pattern match
|
|
282
|
+
*/
|
|
283
|
+
function extractRelevantContent(content, pattern) {
|
|
284
|
+
const match = content.match(pattern);
|
|
285
|
+
if (!match)
|
|
286
|
+
return null;
|
|
287
|
+
// Find the sentence containing the match
|
|
288
|
+
const sentences = content.split(/[.!?]+/);
|
|
289
|
+
for (const sentence of sentences) {
|
|
290
|
+
if (pattern.test(sentence)) {
|
|
291
|
+
return sentence.trim();
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
return match[0];
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Truncate string with ellipsis
|
|
298
|
+
*/
|
|
299
|
+
function truncate(str, maxLen) {
|
|
300
|
+
if (str.length <= maxLen)
|
|
301
|
+
return str;
|
|
302
|
+
return str.slice(0, maxLen - 3) + '...';
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Get memory hooks with default settings
|
|
306
|
+
*
|
|
307
|
+
* @param agentId - Agent identifier
|
|
308
|
+
* @param projectId - Project identifier
|
|
309
|
+
*/
|
|
310
|
+
export function getMemoryHooks(agentId, projectId) {
|
|
311
|
+
return createMemoryHooks({ agentId, projectId });
|
|
312
|
+
}
|
|
313
|
+
//# sourceMappingURL=memory-hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-hooks.js","sourceRoot":"","sources":["../src/memory-hooks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Service
|
|
3
|
+
*
|
|
4
|
+
* A simplified service wrapper around memory adapters for use in hooks.
|
|
5
|
+
* Provides a consistent interface and handles common operations.
|
|
6
|
+
*/
|
|
7
|
+
import type { MemoryAdapter, MemoryService, MemoryConfig } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Options for creating a memory service
|
|
10
|
+
*/
|
|
11
|
+
export interface MemoryServiceOptions {
|
|
12
|
+
/** Pre-configured adapter to use */
|
|
13
|
+
adapter?: MemoryAdapter;
|
|
14
|
+
/** Configuration for creating a new adapter */
|
|
15
|
+
config?: Partial<MemoryConfig>;
|
|
16
|
+
/** Default agent ID for all operations */
|
|
17
|
+
agentId?: string;
|
|
18
|
+
/** Default project ID for all operations */
|
|
19
|
+
projectId?: string;
|
|
20
|
+
/** Default session ID for all operations */
|
|
21
|
+
sessionId?: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Create a memory service instance
|
|
25
|
+
*
|
|
26
|
+
* @param options - Service configuration
|
|
27
|
+
* @returns Memory service instance
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```typescript
|
|
31
|
+
* // Create with default in-memory adapter
|
|
32
|
+
* const memory = createMemoryService();
|
|
33
|
+
*
|
|
34
|
+
* // Create with specific adapter
|
|
35
|
+
* const adapter = await createMemoryAdapter({ type: 'supermemory', apiKey });
|
|
36
|
+
* const memory = createMemoryService({ adapter });
|
|
37
|
+
*
|
|
38
|
+
* // Create with config
|
|
39
|
+
* const memory = createMemoryService({
|
|
40
|
+
* config: { type: 'supermemory' },
|
|
41
|
+
* agentId: 'my-agent',
|
|
42
|
+
* });
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
export declare function createMemoryService(options?: MemoryServiceOptions): MemoryService & {
|
|
46
|
+
getUnderlyingAdapter(): MemoryAdapter | null;
|
|
47
|
+
close(): Promise<void>;
|
|
48
|
+
};
|
|
49
|
+
//# sourceMappingURL=service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,aAAa,EAKb,aAAa,EACb,YAAY,EACb,MAAM,YAAY,CAAC;AAGpB;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,oCAAoC;IACpC,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,+CAA+C;IAC/C,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAC/B,0CAA0C;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAsID;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,aAAa,GAAG;IACnF,oBAAoB,IAAI,aAAa,GAAG,IAAI,CAAC;IAC7C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB,CAEA"}
|
package/dist/service.js
ADDED
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Service
|
|
3
|
+
*
|
|
4
|
+
* A simplified service wrapper around memory adapters for use in hooks.
|
|
5
|
+
* Provides a consistent interface and handles common operations.
|
|
6
|
+
*/
|
|
7
|
+
import { createMemoryAdapter } from './factory.js';
|
|
8
|
+
/**
|
|
9
|
+
* Internal memory service implementation
|
|
10
|
+
*/
|
|
11
|
+
class MemoryServiceImpl {
|
|
12
|
+
adapter = null;
|
|
13
|
+
adapterPromise = null;
|
|
14
|
+
options;
|
|
15
|
+
available = false;
|
|
16
|
+
constructor(options = {}) {
|
|
17
|
+
this.options = options;
|
|
18
|
+
if (options.adapter) {
|
|
19
|
+
this.adapter = options.adapter;
|
|
20
|
+
this.available = true;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Lazily initialize the adapter
|
|
25
|
+
*/
|
|
26
|
+
async getAdapter() {
|
|
27
|
+
if (this.adapter) {
|
|
28
|
+
return this.adapter;
|
|
29
|
+
}
|
|
30
|
+
if (!this.adapterPromise) {
|
|
31
|
+
this.adapterPromise = this.initAdapter();
|
|
32
|
+
}
|
|
33
|
+
return this.adapterPromise;
|
|
34
|
+
}
|
|
35
|
+
async initAdapter() {
|
|
36
|
+
try {
|
|
37
|
+
const config = this.options.config ?? {};
|
|
38
|
+
this.adapter = await createMemoryAdapter({
|
|
39
|
+
...config,
|
|
40
|
+
defaultAgentId: config.defaultAgentId ?? this.options.agentId,
|
|
41
|
+
defaultProjectId: config.defaultProjectId ?? this.options.projectId,
|
|
42
|
+
});
|
|
43
|
+
this.available = true;
|
|
44
|
+
return this.adapter;
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
console.error('[memory] Failed to initialize adapter:', error);
|
|
48
|
+
this.available = false;
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
async add(content, options) {
|
|
53
|
+
const adapter = await this.getAdapter();
|
|
54
|
+
if (!adapter) {
|
|
55
|
+
return { success: false, error: 'Memory adapter not available' };
|
|
56
|
+
}
|
|
57
|
+
return adapter.add(content, {
|
|
58
|
+
...options,
|
|
59
|
+
agentId: options?.agentId ?? this.options.agentId,
|
|
60
|
+
projectId: options?.projectId ?? this.options.projectId,
|
|
61
|
+
sessionId: options?.sessionId ?? this.options.sessionId,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
async search(query) {
|
|
65
|
+
const adapter = await this.getAdapter();
|
|
66
|
+
if (!adapter) {
|
|
67
|
+
return [];
|
|
68
|
+
}
|
|
69
|
+
const searchQuery = typeof query === 'string'
|
|
70
|
+
? {
|
|
71
|
+
query,
|
|
72
|
+
agentId: this.options.agentId,
|
|
73
|
+
projectId: this.options.projectId,
|
|
74
|
+
}
|
|
75
|
+
: {
|
|
76
|
+
...query,
|
|
77
|
+
agentId: query.agentId ?? this.options.agentId,
|
|
78
|
+
projectId: query.projectId ?? this.options.projectId,
|
|
79
|
+
};
|
|
80
|
+
return adapter.search(searchQuery);
|
|
81
|
+
}
|
|
82
|
+
async delete(id) {
|
|
83
|
+
const adapter = await this.getAdapter();
|
|
84
|
+
if (!adapter) {
|
|
85
|
+
return { success: false, error: 'Memory adapter not available' };
|
|
86
|
+
}
|
|
87
|
+
return adapter.delete(id);
|
|
88
|
+
}
|
|
89
|
+
async list(limit) {
|
|
90
|
+
const adapter = await this.getAdapter();
|
|
91
|
+
if (!adapter || !adapter.list) {
|
|
92
|
+
return [];
|
|
93
|
+
}
|
|
94
|
+
return adapter.list({
|
|
95
|
+
limit,
|
|
96
|
+
agentId: this.options.agentId,
|
|
97
|
+
projectId: this.options.projectId,
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
isAvailable() {
|
|
101
|
+
return this.available;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Get the underlying adapter (for advanced use)
|
|
105
|
+
*/
|
|
106
|
+
getUnderlyingAdapter() {
|
|
107
|
+
return this.adapter;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Close the adapter
|
|
111
|
+
*/
|
|
112
|
+
async close() {
|
|
113
|
+
if (this.adapter?.close) {
|
|
114
|
+
await this.adapter.close();
|
|
115
|
+
}
|
|
116
|
+
this.adapter = null;
|
|
117
|
+
this.adapterPromise = null;
|
|
118
|
+
this.available = false;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Create a memory service instance
|
|
123
|
+
*
|
|
124
|
+
* @param options - Service configuration
|
|
125
|
+
* @returns Memory service instance
|
|
126
|
+
*
|
|
127
|
+
* @example
|
|
128
|
+
* ```typescript
|
|
129
|
+
* // Create with default in-memory adapter
|
|
130
|
+
* const memory = createMemoryService();
|
|
131
|
+
*
|
|
132
|
+
* // Create with specific adapter
|
|
133
|
+
* const adapter = await createMemoryAdapter({ type: 'supermemory', apiKey });
|
|
134
|
+
* const memory = createMemoryService({ adapter });
|
|
135
|
+
*
|
|
136
|
+
* // Create with config
|
|
137
|
+
* const memory = createMemoryService({
|
|
138
|
+
* config: { type: 'supermemory' },
|
|
139
|
+
* agentId: 'my-agent',
|
|
140
|
+
* });
|
|
141
|
+
* ```
|
|
142
|
+
*/
|
|
143
|
+
export function createMemoryService(options) {
|
|
144
|
+
return new MemoryServiceImpl(options);
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
|