@whenmoon-afk/memory-mcp 2.0.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/LICENSE +21 -0
- package/README.md +263 -0
- package/dist/database/connection.d.ts +47 -0
- package/dist/database/connection.d.ts.map +1 -0
- package/dist/database/connection.js +151 -0
- package/dist/database/connection.js.map +1 -0
- package/dist/database/schema.d.ts +33 -0
- package/dist/database/schema.d.ts.map +1 -0
- package/dist/database/schema.js +293 -0
- package/dist/database/schema.js.map +1 -0
- package/dist/extractors/entity-extractor.d.ts +25 -0
- package/dist/extractors/entity-extractor.d.ts.map +1 -0
- package/dist/extractors/entity-extractor.js +195 -0
- package/dist/extractors/entity-extractor.js.map +1 -0
- package/dist/extractors/fact-extractor.d.ts +38 -0
- package/dist/extractors/fact-extractor.d.ts.map +1 -0
- package/dist/extractors/fact-extractor.js +172 -0
- package/dist/extractors/fact-extractor.js.map +1 -0
- package/dist/extractors/summary-generator.d.ts +28 -0
- package/dist/extractors/summary-generator.d.ts.map +1 -0
- package/dist/extractors/summary-generator.js +149 -0
- package/dist/extractors/summary-generator.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +229 -0
- package/dist/index.js.map +1 -0
- package/dist/scoring/importance.d.ts +39 -0
- package/dist/scoring/importance.d.ts.map +1 -0
- package/dist/scoring/importance.js +150 -0
- package/dist/scoring/importance.js.map +1 -0
- package/dist/scoring/ttl-manager.d.ts +33 -0
- package/dist/scoring/ttl-manager.d.ts.map +1 -0
- package/dist/scoring/ttl-manager.js +99 -0
- package/dist/scoring/ttl-manager.js.map +1 -0
- package/dist/search/semantic-search.d.ts +15 -0
- package/dist/search/semantic-search.d.ts.map +1 -0
- package/dist/search/semantic-search.js +236 -0
- package/dist/search/semantic-search.js.map +1 -0
- package/dist/tools/memory-forget.d.ts +10 -0
- package/dist/tools/memory-forget.d.ts.map +1 -0
- package/dist/tools/memory-forget.js +34 -0
- package/dist/tools/memory-forget.js.map +1 -0
- package/dist/tools/memory-recall.d.ts +12 -0
- package/dist/tools/memory-recall.d.ts.map +1 -0
- package/dist/tools/memory-recall.js +106 -0
- package/dist/tools/memory-recall.js.map +1 -0
- package/dist/tools/memory-store.d.ts +13 -0
- package/dist/tools/memory-store.d.ts.map +1 -0
- package/dist/tools/memory-store.js +279 -0
- package/dist/tools/memory-store.js.map +1 -0
- package/dist/tools/response-formatter.d.ts +71 -0
- package/dist/tools/response-formatter.d.ts.map +1 -0
- package/dist/tools/response-formatter.js +180 -0
- package/dist/tools/response-formatter.js.map +1 -0
- package/dist/types/index.d.ts +244 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +29 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/token-estimator.d.ts +33 -0
- package/dist/utils/token-estimator.d.ts.map +1 -0
- package/dist/utils/token-estimator.js +54 -0
- package/dist/utils/token-estimator.js.map +1 -0
- package/package.json +71 -0
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Response Formatter - Format memories with tiered detail levels
|
|
3
|
+
*
|
|
4
|
+
* Critical: NEVER include embedding or vector fields in responses
|
|
5
|
+
* Token targets: minimal=30, standard=200, full=500
|
|
6
|
+
*/
|
|
7
|
+
import { estimateTokens } from '../utils/token-estimator.js';
|
|
8
|
+
/**
|
|
9
|
+
* Format a single memory according to detail level
|
|
10
|
+
*
|
|
11
|
+
* @param memory - The memory to format
|
|
12
|
+
* @param detailLevel - Level of detail to include
|
|
13
|
+
* @param options - Optional entities, provenance, and tags
|
|
14
|
+
* @returns Formatted memory (NO embeddings)
|
|
15
|
+
*/
|
|
16
|
+
export function formatMemory(memory, detailLevel, options = {}) {
|
|
17
|
+
switch (detailLevel) {
|
|
18
|
+
case 'minimal':
|
|
19
|
+
return formatMinimal(memory);
|
|
20
|
+
case 'standard':
|
|
21
|
+
return formatStandard(memory, options);
|
|
22
|
+
case 'full':
|
|
23
|
+
return formatFull(memory, options);
|
|
24
|
+
default:
|
|
25
|
+
return formatStandard(memory, options);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Format minimal memory (~30 tokens)
|
|
30
|
+
* Only essential fields: id, type, summary, importance
|
|
31
|
+
*/
|
|
32
|
+
function formatMinimal(memory) {
|
|
33
|
+
return {
|
|
34
|
+
id: memory.id,
|
|
35
|
+
type: memory.type,
|
|
36
|
+
summary: memory.summary,
|
|
37
|
+
importance: memory.importance,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Format standard memory (~200 tokens)
|
|
42
|
+
* Includes: minimal fields + content + optional entities + timestamps
|
|
43
|
+
*/
|
|
44
|
+
function formatStandard(memory, options) {
|
|
45
|
+
const formatted = {
|
|
46
|
+
id: memory.id,
|
|
47
|
+
type: memory.type,
|
|
48
|
+
summary: memory.summary,
|
|
49
|
+
content: memory.content,
|
|
50
|
+
importance: memory.importance,
|
|
51
|
+
created_at: new Date(memory.created_at).toISOString(),
|
|
52
|
+
last_accessed: new Date(memory.last_accessed).toISOString(),
|
|
53
|
+
};
|
|
54
|
+
// Only include entities if present
|
|
55
|
+
if (options.entities && options.entities.length > 0) {
|
|
56
|
+
formatted.entities = options.entities.map((e) => e.name);
|
|
57
|
+
}
|
|
58
|
+
return formatted;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Format full memory (~500 tokens)
|
|
62
|
+
* Includes: all standard fields + entities + tags + access_count + expires_at + provenance
|
|
63
|
+
*/
|
|
64
|
+
function formatFull(memory, options) {
|
|
65
|
+
const formatted = {
|
|
66
|
+
id: memory.id,
|
|
67
|
+
type: memory.type,
|
|
68
|
+
summary: memory.summary,
|
|
69
|
+
content: memory.content,
|
|
70
|
+
entities: options.entities ? options.entities.map((e) => e.name) : [],
|
|
71
|
+
tags: options.tags || extractTagsFromMetadata(memory.metadata),
|
|
72
|
+
importance: memory.importance,
|
|
73
|
+
access_count: memory.access_count,
|
|
74
|
+
created_at: new Date(memory.created_at).toISOString(),
|
|
75
|
+
last_accessed: new Date(memory.last_accessed).toISOString(),
|
|
76
|
+
expires_at: memory.expires_at ? new Date(memory.expires_at).toISOString() : null,
|
|
77
|
+
provenance: extractProvenanceInfo(options.provenance),
|
|
78
|
+
};
|
|
79
|
+
return formatted;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Extract tags from metadata
|
|
83
|
+
*/
|
|
84
|
+
function extractTagsFromMetadata(metadata) {
|
|
85
|
+
if (metadata.tags && Array.isArray(metadata.tags)) {
|
|
86
|
+
return metadata.tags.filter((tag) => typeof tag === 'string');
|
|
87
|
+
}
|
|
88
|
+
return [];
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Extract provenance information (only most recent)
|
|
92
|
+
*/
|
|
93
|
+
function extractProvenanceInfo(provenance) {
|
|
94
|
+
if (!provenance || provenance.length === 0) {
|
|
95
|
+
return null;
|
|
96
|
+
}
|
|
97
|
+
// Get most recent provenance record
|
|
98
|
+
const mostRecent = provenance.reduce((latest, current) => current.timestamp > latest.timestamp ? current : latest);
|
|
99
|
+
return {
|
|
100
|
+
source: mostRecent.source,
|
|
101
|
+
timestamp: new Date(mostRecent.timestamp).toISOString(),
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Format a list of memories
|
|
106
|
+
*
|
|
107
|
+
* @param memories - Array of memories to format
|
|
108
|
+
* @param detailLevel - Level of detail to include
|
|
109
|
+
* @param optionsMap - Map of memory IDs to format options
|
|
110
|
+
* @returns Array of formatted memories
|
|
111
|
+
*/
|
|
112
|
+
export function formatMemoryList(memories, detailLevel, optionsMap) {
|
|
113
|
+
return memories.map((memory) => {
|
|
114
|
+
const options = optionsMap?.get(memory.id) || {};
|
|
115
|
+
return formatMemory(memory, detailLevel, options);
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Get estimated token count for a formatted memory
|
|
120
|
+
*
|
|
121
|
+
* @param memory - Formatted memory to estimate
|
|
122
|
+
* @returns Estimated token count
|
|
123
|
+
*/
|
|
124
|
+
export function getMemoryTokenCount(memory) {
|
|
125
|
+
return estimateTokens(memory);
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Validate that a memory list fits within token budget
|
|
129
|
+
*
|
|
130
|
+
* @param memories - Array of formatted memories
|
|
131
|
+
* @param maxTokens - Maximum allowed tokens
|
|
132
|
+
* @returns Validation result
|
|
133
|
+
*/
|
|
134
|
+
export function validateMemoryBudget(memories, maxTokens) {
|
|
135
|
+
const estimated = estimateTokens(memories);
|
|
136
|
+
return {
|
|
137
|
+
fits: estimated <= maxTokens,
|
|
138
|
+
estimated,
|
|
139
|
+
count: memories.length,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Truncate memory list to fit within token budget
|
|
144
|
+
*
|
|
145
|
+
* @param memories - Array of formatted memories
|
|
146
|
+
* @param maxTokens - Maximum token budget
|
|
147
|
+
* @returns Truncated array that fits within budget
|
|
148
|
+
*/
|
|
149
|
+
export function truncateToTokenBudget(memories, maxTokens) {
|
|
150
|
+
const result = [];
|
|
151
|
+
let currentTokens = 0;
|
|
152
|
+
for (const memory of memories) {
|
|
153
|
+
const memoryTokens = getMemoryTokenCount(memory);
|
|
154
|
+
if (currentTokens + memoryTokens <= maxTokens) {
|
|
155
|
+
result.push(memory);
|
|
156
|
+
currentTokens += memoryTokens;
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
break;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return result;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Debug: Get token statistics for a memory
|
|
166
|
+
*
|
|
167
|
+
* @param memory - Formatted memory to analyze
|
|
168
|
+
* @returns Token statistics
|
|
169
|
+
*/
|
|
170
|
+
export function getMemoryTokenStats(memory) {
|
|
171
|
+
const byField = {};
|
|
172
|
+
let total = 0;
|
|
173
|
+
for (const [key, value] of Object.entries(memory)) {
|
|
174
|
+
const fieldTokens = estimateTokens(JSON.stringify(value));
|
|
175
|
+
byField[key] = fieldTokens;
|
|
176
|
+
total += fieldTokens;
|
|
177
|
+
}
|
|
178
|
+
return { total, byField };
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=response-formatter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response-formatter.js","sourceRoot":"","sources":["../../src/tools/response-formatter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core type definitions for Memory MCP v2.0
|
|
3
|
+
*/
|
|
4
|
+
export type MemoryType = 'fact' | 'entity' | 'relationship' | 'self';
|
|
5
|
+
export interface Memory {
|
|
6
|
+
id: string;
|
|
7
|
+
content: string;
|
|
8
|
+
summary: string;
|
|
9
|
+
type: MemoryType;
|
|
10
|
+
importance: number;
|
|
11
|
+
created_at: number;
|
|
12
|
+
last_accessed: number;
|
|
13
|
+
access_count: number;
|
|
14
|
+
expires_at: number | null;
|
|
15
|
+
metadata: Record<string, unknown>;
|
|
16
|
+
is_deleted: boolean;
|
|
17
|
+
}
|
|
18
|
+
export interface MemoryInput {
|
|
19
|
+
id?: string;
|
|
20
|
+
content: string;
|
|
21
|
+
type: MemoryType;
|
|
22
|
+
importance?: number;
|
|
23
|
+
entities?: string[];
|
|
24
|
+
tags?: string[];
|
|
25
|
+
metadata?: Record<string, unknown>;
|
|
26
|
+
ttl_days?: number | null;
|
|
27
|
+
expires_at?: string;
|
|
28
|
+
provenance?: ProvenanceInput;
|
|
29
|
+
}
|
|
30
|
+
export interface MemoryUpdate {
|
|
31
|
+
id: string;
|
|
32
|
+
content?: string;
|
|
33
|
+
importance?: number;
|
|
34
|
+
metadata?: Record<string, unknown>;
|
|
35
|
+
ttl_days?: number | null;
|
|
36
|
+
updateReason?: string;
|
|
37
|
+
}
|
|
38
|
+
export interface MemorySearchResult extends Memory {
|
|
39
|
+
score: number;
|
|
40
|
+
entities: Entity[];
|
|
41
|
+
provenance: Provenance[];
|
|
42
|
+
}
|
|
43
|
+
export type EntityType = 'person' | 'organization' | 'project' | 'technology' | 'location' | 'concept' | 'document' | 'other';
|
|
44
|
+
export interface Entity {
|
|
45
|
+
id: string;
|
|
46
|
+
name: string;
|
|
47
|
+
type: EntityType;
|
|
48
|
+
metadata: Record<string, unknown>;
|
|
49
|
+
created_at: number;
|
|
50
|
+
}
|
|
51
|
+
export interface EntityInput {
|
|
52
|
+
name: string;
|
|
53
|
+
type?: EntityType;
|
|
54
|
+
metadata?: Record<string, unknown>;
|
|
55
|
+
}
|
|
56
|
+
export type ProvenanceOperation = 'create' | 'update' | 'delete' | 'access' | 'restore';
|
|
57
|
+
export interface Provenance {
|
|
58
|
+
id: string;
|
|
59
|
+
memory_id: string;
|
|
60
|
+
operation: ProvenanceOperation;
|
|
61
|
+
timestamp: number;
|
|
62
|
+
source: string;
|
|
63
|
+
context: string | null;
|
|
64
|
+
user_id: string | null;
|
|
65
|
+
changes: Record<string, unknown> | null;
|
|
66
|
+
}
|
|
67
|
+
export interface ProvenanceInput {
|
|
68
|
+
source: string;
|
|
69
|
+
timestamp?: string;
|
|
70
|
+
context?: string;
|
|
71
|
+
user_id?: string;
|
|
72
|
+
}
|
|
73
|
+
export interface SearchOptions {
|
|
74
|
+
query: string;
|
|
75
|
+
max_tokens?: number;
|
|
76
|
+
type?: MemoryType;
|
|
77
|
+
entities?: string[];
|
|
78
|
+
limit?: number;
|
|
79
|
+
}
|
|
80
|
+
export interface SearchOptionsInternal extends SearchOptions {
|
|
81
|
+
offset?: number;
|
|
82
|
+
minImportance?: number;
|
|
83
|
+
includeExpired?: boolean;
|
|
84
|
+
}
|
|
85
|
+
export interface SearchFilters {
|
|
86
|
+
type?: MemoryType;
|
|
87
|
+
entities?: string[];
|
|
88
|
+
minImportance?: number;
|
|
89
|
+
includeExpired: boolean;
|
|
90
|
+
}
|
|
91
|
+
export interface ImportanceFactors {
|
|
92
|
+
contentComplexity: number;
|
|
93
|
+
entityCount: number;
|
|
94
|
+
isUserPreference: boolean;
|
|
95
|
+
hasProvenance: boolean;
|
|
96
|
+
hasMetadata: boolean;
|
|
97
|
+
isExplicit: boolean;
|
|
98
|
+
typeBonus: number;
|
|
99
|
+
}
|
|
100
|
+
export interface TTLConfig {
|
|
101
|
+
defaultDays: number;
|
|
102
|
+
importanceMultiplier: number;
|
|
103
|
+
accessBonusDays: number;
|
|
104
|
+
refreshThresholdDays: number;
|
|
105
|
+
}
|
|
106
|
+
export type DetailLevel = 'minimal' | 'standard' | 'full';
|
|
107
|
+
/**
|
|
108
|
+
* Minimal format: ~30 tokens - summaries only
|
|
109
|
+
*/
|
|
110
|
+
export interface MinimalMemory {
|
|
111
|
+
id: string;
|
|
112
|
+
type: string;
|
|
113
|
+
summary: string;
|
|
114
|
+
importance: number;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Standard format: ~200 tokens - content + optional entities
|
|
118
|
+
*/
|
|
119
|
+
export interface StandardMemory {
|
|
120
|
+
id: string;
|
|
121
|
+
type: string;
|
|
122
|
+
summary: string;
|
|
123
|
+
content: string;
|
|
124
|
+
entities?: string[];
|
|
125
|
+
importance: number;
|
|
126
|
+
created_at: string;
|
|
127
|
+
last_accessed: string;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Full format: ~500 tokens - everything + provenance
|
|
131
|
+
*/
|
|
132
|
+
export interface FullMemory {
|
|
133
|
+
id: string;
|
|
134
|
+
type: string;
|
|
135
|
+
summary: string;
|
|
136
|
+
content: string;
|
|
137
|
+
entities: string[];
|
|
138
|
+
tags: string[];
|
|
139
|
+
importance: number;
|
|
140
|
+
access_count: number;
|
|
141
|
+
created_at: string;
|
|
142
|
+
last_accessed: string;
|
|
143
|
+
expires_at: string | null;
|
|
144
|
+
provenance: {
|
|
145
|
+
source: string;
|
|
146
|
+
timestamp: string;
|
|
147
|
+
} | null;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Union type for all formatted memory formats
|
|
151
|
+
*/
|
|
152
|
+
export type FormattedMemory = MinimalMemory | StandardMemory | FullMemory;
|
|
153
|
+
export interface StoreResponse {
|
|
154
|
+
success: boolean;
|
|
155
|
+
memory_id: string;
|
|
156
|
+
importance: number;
|
|
157
|
+
entities_extracted: string[];
|
|
158
|
+
expires_at: number | null;
|
|
159
|
+
message: string;
|
|
160
|
+
}
|
|
161
|
+
export interface RecallResponse {
|
|
162
|
+
index: MinimalMemory[];
|
|
163
|
+
details: FormattedMemory[];
|
|
164
|
+
total_count: number;
|
|
165
|
+
has_more: boolean;
|
|
166
|
+
tokens_used: number;
|
|
167
|
+
query: string;
|
|
168
|
+
}
|
|
169
|
+
export interface UpdateResponse {
|
|
170
|
+
success: boolean;
|
|
171
|
+
memory_id: string;
|
|
172
|
+
changes: Record<string, unknown>;
|
|
173
|
+
message: string;
|
|
174
|
+
}
|
|
175
|
+
export interface ForgetResponse {
|
|
176
|
+
success: boolean;
|
|
177
|
+
memory_id: string;
|
|
178
|
+
message: string;
|
|
179
|
+
}
|
|
180
|
+
export interface PruneResponse {
|
|
181
|
+
success: boolean;
|
|
182
|
+
pruned_count: number;
|
|
183
|
+
dry_run: boolean;
|
|
184
|
+
details: {
|
|
185
|
+
expired_count: number;
|
|
186
|
+
deleted_count: number;
|
|
187
|
+
old_threshold_days: number;
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
export declare class MemoryError extends Error {
|
|
191
|
+
code: string;
|
|
192
|
+
details?: Record<string, unknown> | undefined;
|
|
193
|
+
constructor(message: string, code: string, details?: Record<string, unknown> | undefined);
|
|
194
|
+
}
|
|
195
|
+
export declare class DatabaseError extends MemoryError {
|
|
196
|
+
constructor(message: string, details?: Record<string, unknown>);
|
|
197
|
+
}
|
|
198
|
+
export declare class ValidationError extends MemoryError {
|
|
199
|
+
constructor(message: string, details?: Record<string, unknown>);
|
|
200
|
+
}
|
|
201
|
+
export interface CacheEntry<T> {
|
|
202
|
+
data: T;
|
|
203
|
+
expiresAt: number;
|
|
204
|
+
}
|
|
205
|
+
export type Awaitable<T> = T | Promise<T>;
|
|
206
|
+
export type DeepPartial<T> = {
|
|
207
|
+
[P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];
|
|
208
|
+
};
|
|
209
|
+
export interface MemoryRow {
|
|
210
|
+
id: string;
|
|
211
|
+
content: string;
|
|
212
|
+
summary: string;
|
|
213
|
+
type: string;
|
|
214
|
+
importance: number;
|
|
215
|
+
created_at: number;
|
|
216
|
+
last_accessed: number;
|
|
217
|
+
access_count: number;
|
|
218
|
+
expires_at: number | null;
|
|
219
|
+
metadata: string;
|
|
220
|
+
is_deleted: number;
|
|
221
|
+
}
|
|
222
|
+
export interface EntityRow {
|
|
223
|
+
id: string;
|
|
224
|
+
name: string;
|
|
225
|
+
type: string;
|
|
226
|
+
metadata: string;
|
|
227
|
+
created_at: number;
|
|
228
|
+
}
|
|
229
|
+
export interface MemoryEntityRow {
|
|
230
|
+
memory_id: string;
|
|
231
|
+
entity_id: string;
|
|
232
|
+
created_at: number;
|
|
233
|
+
}
|
|
234
|
+
export interface ProvenanceRow {
|
|
235
|
+
id: string;
|
|
236
|
+
memory_id: string;
|
|
237
|
+
operation: string;
|
|
238
|
+
timestamp: number;
|
|
239
|
+
source: string;
|
|
240
|
+
context: string | null;
|
|
241
|
+
user_id: string | null;
|
|
242
|
+
changes: string | null;
|
|
243
|
+
}
|
|
244
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core type definitions for Memory MCP v2.0
|
|
3
|
+
*/
|
|
4
|
+
// ============================================================================
|
|
5
|
+
// Error Types
|
|
6
|
+
// ============================================================================
|
|
7
|
+
export class MemoryError extends Error {
|
|
8
|
+
code;
|
|
9
|
+
details;
|
|
10
|
+
constructor(message, code, details) {
|
|
11
|
+
super(message);
|
|
12
|
+
this.code = code;
|
|
13
|
+
this.details = details;
|
|
14
|
+
this.name = 'MemoryError';
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export class DatabaseError extends MemoryError {
|
|
18
|
+
constructor(message, details) {
|
|
19
|
+
super(message, 'DATABASE_ERROR', details);
|
|
20
|
+
this.name = 'DatabaseError';
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
export class ValidationError extends MemoryError {
|
|
24
|
+
constructor(message, details) {
|
|
25
|
+
super(message, 'VALIDATION_ERROR', details);
|
|
26
|
+
this.name = 'ValidationError';
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAgQH,+EAA+E;AAC/E,cAAc;AACd,+EAA+E;AAE/E,MAAM,OAAO,WAAY,SAAQ,KAAK;IAG3B;IACA;IAHT,YACE,OAAe,EACR,IAAY,EACZ,OAAiC;QAExC,KAAK,CAAC,OAAO,CAAC,CAAC;QAHR,SAAI,GAAJ,IAAI,CAAQ;QACZ,YAAO,GAAP,OAAO,CAA0B;QAGxC,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC5B,CAAC;CACF;AAED,MAAM,OAAO,aAAc,SAAQ,WAAW;IAC5C,YAAY,OAAe,EAAE,OAAiC;QAC5D,KAAK,CAAC,OAAO,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF;AAED,MAAM,OAAO,eAAgB,SAAQ,WAAW;IAC9C,YAAY,OAAe,EAAE,OAAiC;QAC5D,KAAK,CAAC,OAAO,EAAE,kBAAkB,EAAE,OAAO,CAAC,CAAC;QAC5C,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Token Estimation Utilities
|
|
3
|
+
*
|
|
4
|
+
* Simple heuristic-based token counting for response formatting
|
|
5
|
+
* Uses the rule of thumb: ~4 characters per token
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Estimate token count for text or JSON object
|
|
9
|
+
*
|
|
10
|
+
* @param input - Text string or object to estimate
|
|
11
|
+
* @returns Estimated token count
|
|
12
|
+
*/
|
|
13
|
+
export declare function estimateTokens(input: string | object): number;
|
|
14
|
+
/**
|
|
15
|
+
* Validate that memories fit within a token budget
|
|
16
|
+
*
|
|
17
|
+
* @param memories - Array of formatted memories
|
|
18
|
+
* @param maxTokens - Maximum token budget
|
|
19
|
+
* @returns Validation result with estimated token count
|
|
20
|
+
*/
|
|
21
|
+
export declare function validateTokenBudget(memories: unknown[], maxTokens: number): {
|
|
22
|
+
fits: boolean;
|
|
23
|
+
estimated: number;
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Filter memories to fit within a token budget
|
|
27
|
+
*
|
|
28
|
+
* @param memories - Array of memories (any format)
|
|
29
|
+
* @param maxTokens - Maximum token budget
|
|
30
|
+
* @returns Filtered array that fits within budget
|
|
31
|
+
*/
|
|
32
|
+
export declare function fitWithinBudget<T extends object>(memories: T[], maxTokens: number): T[];
|
|
33
|
+
//# sourceMappingURL=token-estimator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-estimator.d.ts","sourceRoot":"","sources":["../../src/utils/token-estimator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAI7D;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,OAAO,EAAE,EACnB,SAAS,EAAE,MAAM,GAChB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAMtC;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,CAAC,EAAE,CAevF"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Token Estimation Utilities
|
|
3
|
+
*
|
|
4
|
+
* Simple heuristic-based token counting for response formatting
|
|
5
|
+
* Uses the rule of thumb: ~4 characters per token
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Estimate token count for text or JSON object
|
|
9
|
+
*
|
|
10
|
+
* @param input - Text string or object to estimate
|
|
11
|
+
* @returns Estimated token count
|
|
12
|
+
*/
|
|
13
|
+
export function estimateTokens(input) {
|
|
14
|
+
const text = typeof input === 'string' ? input : JSON.stringify(input);
|
|
15
|
+
// Rule of thumb: ~4 characters per token
|
|
16
|
+
return Math.ceil(text.length / 4);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Validate that memories fit within a token budget
|
|
20
|
+
*
|
|
21
|
+
* @param memories - Array of formatted memories
|
|
22
|
+
* @param maxTokens - Maximum token budget
|
|
23
|
+
* @returns Validation result with estimated token count
|
|
24
|
+
*/
|
|
25
|
+
export function validateTokenBudget(memories, maxTokens) {
|
|
26
|
+
const estimated = estimateTokens(memories);
|
|
27
|
+
return {
|
|
28
|
+
fits: estimated <= maxTokens,
|
|
29
|
+
estimated,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Filter memories to fit within a token budget
|
|
34
|
+
*
|
|
35
|
+
* @param memories - Array of memories (any format)
|
|
36
|
+
* @param maxTokens - Maximum token budget
|
|
37
|
+
* @returns Filtered array that fits within budget
|
|
38
|
+
*/
|
|
39
|
+
export function fitWithinBudget(memories, maxTokens) {
|
|
40
|
+
const result = [];
|
|
41
|
+
let currentTokens = 0;
|
|
42
|
+
for (const memory of memories) {
|
|
43
|
+
const memoryTokens = estimateTokens(memory);
|
|
44
|
+
if (currentTokens + memoryTokens <= maxTokens) {
|
|
45
|
+
result.push(memory);
|
|
46
|
+
currentTokens += memoryTokens;
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
break;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return result;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=token-estimator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-estimator.js","sourceRoot":"","sources":["../../src/utils/token-estimator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,KAAsB;IACnD,MAAM,IAAI,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACvE,yCAAyC;IACzC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACpC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CACjC,QAAmB,EACnB,SAAiB;IAEjB,MAAM,SAAS,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC3C,OAAO;QACL,IAAI,EAAE,SAAS,IAAI,SAAS;QAC5B,SAAS;KACV,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAmB,QAAa,EAAE,SAAiB;IAChF,MAAM,MAAM,GAAQ,EAAE,CAAC;IACvB,IAAI,aAAa,GAAG,CAAC,CAAC;IAEtB,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;QAC9B,MAAM,YAAY,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,aAAa,GAAG,YAAY,IAAI,SAAS,EAAE,CAAC;YAC9C,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACpB,aAAa,IAAI,YAAY,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,MAAM;QACR,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@whenmoon-afk/memory-mcp",
|
|
3
|
+
"version": "2.0.0",
|
|
4
|
+
"description": "Brain-inspired memory for AI agents - MCP server",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"memory-mcp": "./dist/index.js"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"dist/",
|
|
12
|
+
"README.md",
|
|
13
|
+
"LICENSE"
|
|
14
|
+
],
|
|
15
|
+
"scripts": {
|
|
16
|
+
"dev": "tsx watch src/index.ts",
|
|
17
|
+
"build": "tsc",
|
|
18
|
+
"test": "vitest run",
|
|
19
|
+
"test:watch": "vitest",
|
|
20
|
+
"test:coverage": "vitest run --coverage",
|
|
21
|
+
"lint": "eslint src/",
|
|
22
|
+
"lint:fix": "eslint src/ --fix",
|
|
23
|
+
"typecheck": "tsc --noEmit",
|
|
24
|
+
"format": "prettier --write \"src/**/*.ts\"",
|
|
25
|
+
"format:check": "prettier --check \"src/**/*.ts\"",
|
|
26
|
+
"release": "npm run test && npm run build",
|
|
27
|
+
"clean": "rm -rf dist",
|
|
28
|
+
"prepublishOnly": "npm run clean && npm run build"
|
|
29
|
+
},
|
|
30
|
+
"keywords": [
|
|
31
|
+
"mcp",
|
|
32
|
+
"memory",
|
|
33
|
+
"context",
|
|
34
|
+
"ai",
|
|
35
|
+
"semantic-search",
|
|
36
|
+
"fts5",
|
|
37
|
+
"sqlite"
|
|
38
|
+
],
|
|
39
|
+
"author": "Memory MCP Contributors",
|
|
40
|
+
"license": "MIT",
|
|
41
|
+
"repository": {
|
|
42
|
+
"type": "git",
|
|
43
|
+
"url": "https://github.com/whenmoon-afk/claude-memory-mcp.git"
|
|
44
|
+
},
|
|
45
|
+
"bugs": {
|
|
46
|
+
"url": "https://github.com/whenmoon-afk/claude-memory-mcp/issues"
|
|
47
|
+
},
|
|
48
|
+
"homepage": "https://github.com/whenmoon-afk/claude-memory-mcp#readme",
|
|
49
|
+
"dependencies": {
|
|
50
|
+
"@modelcontextprotocol/sdk": "^1.0.4",
|
|
51
|
+
"better-sqlite3": "^11.0.0"
|
|
52
|
+
},
|
|
53
|
+
"devDependencies": {
|
|
54
|
+
"@types/better-sqlite3": "^7.6.0",
|
|
55
|
+
"@types/node": "^20.0.0",
|
|
56
|
+
"@typescript-eslint/eslint-plugin": "^7.0.0",
|
|
57
|
+
"@typescript-eslint/parser": "^7.0.0",
|
|
58
|
+
"@vitest/coverage-v8": "^1.3.0",
|
|
59
|
+
"eslint": "^8.57.0",
|
|
60
|
+
"prettier": "^3.2.0",
|
|
61
|
+
"tsx": "^4.7.0",
|
|
62
|
+
"typescript": "^5.3.0",
|
|
63
|
+
"vitest": "^1.3.0"
|
|
64
|
+
},
|
|
65
|
+
"engines": {
|
|
66
|
+
"node": ">=18.0.0"
|
|
67
|
+
},
|
|
68
|
+
"publishConfig": {
|
|
69
|
+
"access": "public"
|
|
70
|
+
}
|
|
71
|
+
}
|